[백준/ 파이썬] 6137번 문자열 생성

김민구·2022년 5월 15일
0

백준 풀이

목록 보기
13/18

백준 6137번 문자열 생성

백준 6137번 문제는 문자열을 생성하는 문제입니다.
우선 규칙 두가지를 먼저 살펴보겠습니다.

첫번째 규칙

문자열 S의 가장 앞의 문자 하나를 문자열 T의 마지막에 추가한다.

두번째 규칙

문자열 S의 가장 뒤의 문자 하나를 문자열 T의 마지막에 추가한다.

쉽게 풀어보자면, 문자열 T를 만들기 위해서는 주어진 문자열 S의 맨 앞 또는 맨 뒷열의 문자를 가져와야 한다는 말입니다.

그리고 문자열T는 사전순으로 가장 앞서야합니다.

그렇다면 우리가 생각해줘야하는 경우들은 크게 3가지 경우입니다. (S의 맨 앞을 left, 맨 뒤를 right라고 하겠습니다.)

  1. LEFT < RIGHT --> LEFT 사용
  2. LEFT > RIGHT --> RIGHT 사용
  3. LEFT == RIGHT --> ?

조건1, 2는 그냥 쉽게 생각해주시면 됩니다.
문제는 LEFT == RIGHT인 경우입니다. 이때는 누구를 사용해야할까요?
이를 파악하기 위해 우리는 LETF의 오른쪽 RIGHT의 왼쪽을 비교해야합니다. 그런데 이 값 또한 같을 수도 있으니까 반복문을 통해 돌아주는 것으로 하겠습니다. 그러면 해결이 됩니다. 반복문 (TEMP_LEFT += 1, TEMP_RIGHT -= 1)

전체 코드



n = int(input())
arr = []

for _ in range(n):
    arr.append(input())

left = 0
right = len(arr)-1
answer = ""
while left <= right:
    if arr[left] > arr[right]:
        answer += arr[right]
        right -= 1
    elif arr[left] < arr[right]:
        answer += arr[left]
        left += 1
    else:
        temp_left = left+1
        temp_right = right-1
        flag = 0
        while temp_left <= temp_right:
            if arr[temp_left] < arr[temp_right]:
                flag = 1
                break
            elif arr[temp_left] > arr[temp_right]:
                flag = 2
                break
            temp_left += 1
            temp_right -= 1
        if flag == 1:
            answer += arr[left]
            left += 1
        elif flag == 2:
            answer += arr[right]
            right -= 1
        else:   #전부 같을때
            answer += arr[left]
            left += 1

answer = list(answer)
cnt = 0

for el in answer:
    print(el, end='')
    cnt += 1
    #새줄 문자 고려
    if cnt % 80 == 0:
        print()

profile
성장하는 개발자가 되고싶어요😀

0개의 댓글