bit가 눈 앞에서 왔다갔다

Py) SWEA 2007 패턴 마디의 길이 본문

Algorithm/Prob

Py) SWEA 2007 패턴 마디의 길이

헬린인형 2022. 11. 3. 01:17

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV5P1kNKAl8DFAUq&categoryId=AV5P1kNKAl8DFAUq&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=PYTHON&select-1=2&pageSize=10&pageIndex=1 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

1차: (제한시간 넘겼는데 그냥 풀었음) 47분

 

0. 입출력

 

1. 김예고리즘

1-1. 알고리즘
2중 반복문을 사용해 마디의 길이를 변경시켰다.
1) 마디의 길이를 점점 늘림
2) 이전 마디와 이후 마디가 다를 경우 1번으로 돌아감
3) 이전, 이후 마디가 같을 경우, 끝까지 그런지 확인
4) 끝부분은 마디 내용이 잘려서 들어온 경우가 있으므로, 길이/마디길이 +1 만큼 반복

1-2. 코드

num = int(input())
for i in range(num):
    sent = input()
    save = sent

    for s in range(1, len(sent)):    # 자르는 길이
        if len(sent) == 0:
            break
        sent = save         # 리셋
        front = sent[:s]
        sent = sent[s:]
        
        while len(sent)//s+1:
            now = sent[:s]
            sent = sent[s:]
            if now == front:    # 비어있지 않고 동일하다면 끝까지 확인함
                front = now
                answer = len(front)
            else: break
    print("#{} {}".format(i+1, answer))

 

2. 다른 사람 코드

2-1. 사용 자료구조 및 알고리즘: x

2-2. 로직
for문을 사용한다.
1) 문자열이 최대 30까지 주어진다 했으므로, 점차 증가하는 문자열 길이를 인덱스 값으로 삼아 비교 변수를 만든다 (word)
2) word가 그 다음 단어와 같다면 출력

2-3. 코드

T = int(input())

for t in range(1, T + 1):
    arr = input()
    word = ''
    i = 0
    for i in range(30):
        word += arr[i]
        if word == arr[i + 1:i + len(word) + 1]:
            print("#%d %d" % (t, len(word)))
            break

간결한데, sasamsasam과 같은 형태는 해결을 못한다.

3. 피드백
1) 제약조건을 생각하고 활용했었어야한다.
2) 내 코드는 sasamsasam과 같은건 해결할 수 있지만, sasam은 해결 못한다. 제약조건 부분을 고쳐야함
3) 이런 것도 못풀었던 작년의 나를 생각해보면, 비록 코드가 좀 깔끔하지 못하고 빼먹은 부분은 있지만 많이 성장한 것 같아서 스스로 칭찬

 

반응형
Comments