[Python] BOJ 6137 - 문자열 생성
728x90
반응형
https://www.acmicpc.net/problem/6137
# 마지막 출력하는 형식 때문에 엄청나게 맞왜틀 시전한 문제이다;;
# 알고리즘 자체는 간단하다. 문자열 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
반응형
'문제풀이 > BaekjoonOnlineJudge' 카테고리의 다른 글
[Python] BOJ 17406 - 배열 돌리기 4 (0) | 2021.11.07 |
---|---|
[Python] BOJ 10844 - 쉬운 계단 수 (0) | 2021.10.26 |
[Python] BOJ 1756 - 피자 굽기 (0) | 2021.10.16 |
[Python] BOJ 11967 - 불켜기 (0) | 2021.10.15 |
[Python] BOJ 1107 - 리모컨 (0) | 2021.10.07 |
TAGS.