본문 바로가기

인공지능/알고리즘

[알고리즘] 문자열 밀기 프로그래머스 LEVEL 0

프로그래머스 문자열 밀기 생각한 과정을 풀이로 써보려한다. 
항상 직관적으로 코딩하는 나에게 여러 생각으로 나열하여 풀이하는것이 익숙치 않지만 
이제부터 익숙해지기로 했다. 
 
하루에 1개는 풀어보자 
 
처음에 접근한 방법은 정말 단순하다..
불필요한 조건들과 반복된 것들로 인해 장황해보인다. 

def solution(A,B):
    answer = -1
    if A == B:
        return 0
    lista = list(A)
    listb = list(B)
    for i in range(1,len(A)):
        a = list(lista.pop())
        a.extend(lista)
        lista = a
        if lista == listb:
            return i
            # answer = i
            # break
    return answer

요렇게 해보니깐 이전에 보이지 않았던 것들이 보이면서 
파이썬내장 함수들 중 어떻게 활용하면 좋을지 생각해봤다.
 
string.rindex() 를 사용해서 문자열 뒤의 인덱스 값을 가져오려다 가 실행시켜보니
만약 string 값이 없을 경우 Value error 발생. 
 
이 생각으로 그러면 문자가 포함되지 않을 경우는 바로 -1을 리턴해주면 되니깐
 try, except 문을 사용해보기로 했다.

def solution(A,B):
    string = 2*A
    try:
        if A == B:
            return 0
        return len(string) - (string.rindex(B)+len(A))
    except:
        return -1

이렇게도 되는군..ㅎㅎ
 
다른 사람의 풀이를 통해 어떤 천재들이 존재하는지 확인해봤다. 
와.. 심플 그자체
 
나는 기준 문자를 A로 두었는데 이 천재분은 B의 문자열의 2배를 하여 앞에서 부터 찾는 find 함수를 사용한것. 
그리고 find 는 값이 존재하지 않을 경우 바로 -1을 리턴하기 때문에 완전 심플하게 함수를 만들 수 있었다

solution=lambda a,b:(b*2).find(a)

 
더 열심히 해야겟고만..하하