SWEA 2007. 패턴 마디 길이

jiyoung1220·2021년 7월 24일
0

swea

목록 보기
2/2

정답

T = int(input())

for n in range(1,T+1):
    slist = (input().split(' '))[0]
    result = ''
    for i in range(1, len(slist)):
        if slist[0] == slist[i]:
            if slist[0:i] == slist[i:2*i]:
                result = slist[0:i]
                print('#{0} {1}'.format(n, len(result)))
                break

뭔가 머리속에선 그려지는데 이걸 어떻게 구현해야 하는지 생각하는게 가장 어려웠다. (물론 모든 문제가 그렇겠지만..)

그래도 이번 문제를 풀며 print도 여러번 찍어보고 하면서 swea의 입출력 방식에 대한 건 완전히 감을 잡은 것 같다. 처음 풀 땐, 대체 왜 map을 하고 split를 사용하는지 도통 모르겠던데, 역시 잘 모를땐 print로 다 찍어보는게 답인 것 같다 ㅎㅎ;;

아무튼 처음엔 2중 for문을 돌려서 i번째 요소랑 j번째 요소가 같고, i~j-1째 슬라이싱한 결과랑 j~(2*j-1)번째 슬라이싱한 결과가 같으면 출력하면 되는거 아닌가 했는데,

(Runtime error)
Error Message:
Memory error occured, (e.g. segmentation error, memory limit Exceed, stack overflow,... etc)

두둥! 메모리 에러가 뜨더라..
이중 포문 돌릴 정도까진 아닌가 해서 다시 고민해봤는데, 굳이 i랑 j로 비교할 필요 없이, 첫번째 요소랑 같은 요소 나올때까지 반복문 돌리고, 슬라이싱한 결과가 같으면 출력하면 되는 일이었다.

중간에 break를 안써서 반복끝날때까지 계속 출력되는 바람에 생긴 오류(1)도 있었고,
print 위치를 잘못 잡아서 생긴 오류(2)도 있었고,
위에서 입출력 익숙해졌다곤 했는데 그 전에 input 값이 str으로 잡히는 건 알았어도 split로 나누면 리스트로 잡히는지 몰라서 생긴 오류(3)도 있었고..
일단 생각나는 오류들은 이정도인 것 같고, 이러한 부분들은 이제 알았으니 더는 실수하지 않도록 주의해야겠다!

+) 도저히 집중이 안되면 한숨 자고 일어나서 다시 보는 것도 한가지 방법인 것 같다. 몇십분을 잡고있다가 잠깐 자고일어났는데 몇분만에 해결했다 ㅎ..

+) 아직 알고리즘 공부도 안한 상태에서 모르는 함수를 검색해가며 푸는 이런 방식은 너무 비효율적인 것 같다. 알고리즘 공부 시작할 때까지 swea는 잠깐 봉인!

profile
갓 개발공부를 시작하여 열심히 기초를 다지는 중입니다.

0개의 댓글