성장기록지

깔끔하게 구현하기 프로젝트) 백준 17413 단어 뒤집기 2 본문

알고리즘/구현

깔끔하게 구현하기 프로젝트) 백준 17413 단어 뒤집기 2

pengcon 2024. 5. 13. 16:52

 

 

문제

https://www.acmicpc.net/problem/17413

문제 해결

구현문제를 누가 봐도 이해가 가게 깔끔하게 풀기위한 연습문제로 선택하였다.

처음엔 쉽게 시작한답시고 고른 실버3 문제인데 생각보다 고생을 많이했다..

 

좋은설계를 위해 우선 노트에 구현해야할 구조들과  예시코드를 작성하였다.

근데 글씨를 너무 못써서 따로 타이핑하여 작성하도록 하겠다.

노트는 맨 아래에 있으니 참고하실 분은 참고...

 

 

 

 

구조 설계 

기본 설계

입력받은 문자열(string)에  인덱스 0번부터 마지막까지 반복하는 반복문을 작성한다. -> while idx<=len(string)

반복하며 만나는 인덱스 별 문자들은 덱(deque) 에다가 append한다.

 

세부 설계

1. '<'이 보이면 태그안에 들어왔다는 의미의 변수(in_tag)True로 전환한다.

2. '>'이 보이면 덱의 길이만큼 pop으로 정방향으로 print한다

3.' '(공백)이 보이면 덱의 길이만큼 popleft로 역방향으로 print한다.

  단. in_tag가 true이면 현재 태그안에 있는것이므로 평범하게 덱에다가 append한다.

4. 인덱스의 마지막까지 순회하였어도 덱의 길이만큼 popleft로 역방향으로 print하고 break한다.

 

 

 

 

구현 코드

from collections import deque
#입력 받기
string=input()
#현재 index
idx=0
#태그 안에 있는지 여부
in_tag=False
#출력을 위한 덱 
q=deque()

#태그 안에 있는 문자들을 popleft로 정방향 출력
def print_after_tag():
    for i in range(len(q)):
        print(q.popleft(),end='')
    print(">",end='')

#태그 밖에 있으면 pop으로 역순 출력
def print_before_sapce():
    for i in range(len(q)):
        print(q.pop(),end='')
    print(" ",end='')

# '<'이 나오기 전의 문자들을 역순 출력
def print_before_tag():
    for i in range(len(q)):
        print(q.pop(),end='')
    print("<",end='')

while idx<=len(string):
    # 마지막 인덱스까지 다 탐색했을 때 남은거 출력 
    if idx==len(string):
        print_before_sapce()
        break
    # < 일 때 
    if string[idx]=='<':
        in_tag=True
        print_before_tag()
    # > 일 때
    elif string[idx]=='>':
        in_tag=False
        print_after_tag()
    # ' '(공백) 일 때
    elif string[idx]==' ':
        if in_tag==True:
            q.append(string[idx])
        else:
            print_before_sapce()
    # 다 아니고 그냥 일반적인 글자일 때 
    else: q.append(string[idx])
    idx+=1

 

깔끔한 코드를 위하여 코드에 주석을 넣으며 설명해두고,

출력하는 기능들을 따로 함수로 구분하여 알기쉽게 구현해두었다. 

함수의 이름도 print_after_tag 처럼

기능의 의미를 알 수 있게 최대한 고려하였다.

 


깔끔코드 프로젝트를 지속하여서 고난이도 문제 및 프로젝트에도

지속 적용할 수 있는 체급을 기르고 싶다.

 

 

 

 

 

참고용 구조 설계 그림..