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

문제

  • 주어진 단어의 알파벳 순서를 바꿔 팰린드롬으로 만든다. 만들 수 있는 팰린드롬이 여러개인 경우 사전 순으로 앞쪽에 오는 것을 만든다.

오답노트

  • 문자열 다루는 것인데 name = sys.stdin.readline().strip() 빠뜨려서 틀림

알게된 내용

  • 파이썬 슬라이싱 
    • result[::-1]: result 문자열에서 맨 뒤부터 읽으며 전부 슬라이싱 한 결과
    • list[2:6] index 2 <= x < 6 인 x를 슬라이싱
    • list[2:6:3] index 2 <= x < 6 인 x를 3간격으로 슬라이싱
    • list[:6] index 0<= x < 6 인 x를 슬라이싱
    • list[2:] index 2 <= x  인 x를 슬라이싱
    • list[:-3] index 0 <= x  < -2 인 x를 슬라이싱
    • list[-3:] index -3 <= x 인 x를 슬라이싱
    • list[-5:-2] index -5 <= x  < -2 인 x를 슬라이싱
    • list[::-1] index -1 부터 거꾸로 1개씩 슬라이싱

나의 풀이

  • 주어진 단어를 사전순으로 정렬한다.(문제의 '사전순 가장 앞 쪽 결과를 출력' 요구사항을 충족시키기 위함)
  • 앞에서 부터 알파벳을 하나씩 선택하며, 짝이 되는 알파벳이 있는지 확인한다.
    • 짝이 되는 알파벳을 발견할 경우, result에 해당 알파벳을 추가하고 방문처리
import sys
name = sys.stdin.readline().strip()

visited=[0 for _ in range(len(name))]
result =""
name = sorted(name)

for i, s1 in enumerate(name):
    if visited[i] == 1:
        continue
    for j in range(i+1,len(name)):
        if name[j]==s1 and visited[j]==0 and visited[i]==0:
            result += name[j]
            visited[i] =1
            visited[j] =1

cnt=0
mid =''
for idx, value in enumerate(visited):
    if value == 0:
        cnt+=1
        mid=name[idx]

if cnt >=2:
    print("I'm Sorry Hansoo")
elif cnt ==1:
    result = result + mid+ result[::-1]
    print(result)
else:
    result = result + result[::-1]
    print(result)

'sw > 알고리즘' 카테고리의 다른 글

백준 3986 좋은 단어  (0) 2022.12.07
백준 1940 주몽  (0) 2022.12.07
백준 2178 미로탐색  (0) 2022.12.03
백준 2468 안전영역  (0) 2022.12.03
파이썬 자료형 별 시간복잡도(List, Dict,set)  (0) 2022.11.28

+ Recent posts