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 |