[Python] BOJ 6137 - 문자열 생성

728x90
반응형

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

 

6137번: 문자열 생성

첫 번째 줄에 문자열 S의 길이 N이 주어진다. (N <= 2,000) 이후 N개의 줄에 S를 이루는 문자들이 주어진다.

www.acmicpc.net

# 마지막 출력하는 형식 때문에 엄청나게 맞왜틀 시전한 문제이다;;

 

# 알고리즘 자체는 간단하다. 문자열 S의 맨 앞이나 맨 뒤의 글자를 T에 추가하는 것이기 때문에 

   투 포인터를 사용해 앞 뒤 포인터가 가리키는 S의 값을 비교해 사전순으로 앞선 글자를 

   T에 추가해주면 된다. 

 

# S의 두 포인터가 가리키는 문자가 같을 때는 거기서 새로운 투 포인터를 사용해

   다른 문자가 나올때까지 가운데로 진행시켜서 사전순으로 앞선 글자를 찾아내면 된다.

   diff라는 변수를 선언해 가장 가운데까지 갔을때 모든 글자가 같다면 diff가 False이고

   그땐, 앞이나 뒤 아무 한글자를 T에 추가시키면 된다.

    (나는 앞 글자를 추가하고 i + 1시킴)

 

# 80글자마다 줄바꿈문자 '\n'을 출력해주는 것이 좀 까다로웠다.. (좀이 아니라 많이)

   cnt변수를 통해 T의 글자수를 count해주었고 cnt가 80의 배수가 될때마다 T에 \n을 추가해주는 식으로 했다

 

import sys
input = sys.stdin.readline
N = int(input())
S, T = '', ''
for _ in range(N):
    s = input().rstrip()
    S += s

cnt = 0
i, j = 0, N-1
while i <= j:
    if S[i] < S[j]:
        T += S[i]
        i += 1
    elif S[i] > S[j]:
        T += S[j]
        j -= 1
    else:
        ii, jj = i, j
        diff = False
        while ii <= jj:
            if S[ii] < S[jj]:
                T += S[i]
                i += 1
                diff = True
                break

            elif S[ii] > S[jj]:
                T += S[j]
                j -= 1
                diff = True
                break

            else:
                ii += 1
                jj -= 1
            
        if not diff:
            T += S[i]
            i += 1

    cnt += 1
    if cnt % 80 == 0:
        T += '\n'

print(T)

(solved.ac 티어: 골드 4)

728x90
반응형
TAGS.

Comments