링크 : https://www.acmicpc.net/problem/1213
1213번: 팰린드롬 만들기
첫째 줄에 문제의 정답을 출력한다. 만약 불가능할 때는 "I'm Sorry Hansoo"를 출력한다. 정답이 여러 개일 경우에는 사전순으로 앞서는 것을 출력한다.
www.acmicpc.net
- 문제
- 소요시간 :


- 설계하기(접근방법)
1. 입력받기
문자를 입력받는다
2. 구현하기
이 문제는 홀수인 글자가 2개이상인지 아닌지 파악하면 된다
즉 홀수인 글자가 1개일 때는
항상 그 글자를 가운데에 넣어주면 된다
하지만 1개를 초과하면 팰린드롬 문자열을 만들 수 없다
먼저 딕셔너리를 생성해서 문자열을 넣어준다
그 후 값이 홀수인 갯수를 검사한다
만약 1개라면 그 문자의 값을 1 감소시켜주고, temp에 저장해준다
temp에 저장하는 이유는 추후에 가운데에 끼워넣기 위해서다
3. 출력하기
글자의 개수가 홀수인 경우가 2 이상이면
I'm Sorry Hansoo를 출력
글자의 개수가 1이라면
키와 밸류를 반환값을 값을 Sort한 후 join 연산자를 통해 앞부분을 출력
가운데에 temp를 출력하고
뒷부분은 앞의 문자를 역으로 출력해준다
글자의 개수가 0이라면
가운데를 제외하고 출력해주면 된다
- 코드(출력)
name = input()
f_dict = {}
# 딕셔너리에 입력값 추가
for i in name:
f_dict[i] = 0
for i in name:
f_dict[i] += 1
# 홀수 개가 있는지 검사
cnt = 0
temp = 0
for i in f_dict:
if f_dict[i] % 2 != 0:
cnt += 1
temp = i
f_dict[temp] -= 1
if cnt > 2:
break
f_dict = sorted(f_dict.items())
word = []
if cnt <= 1:
if cnt == 1:
middle = temp
for i in f_dict:
fre = i[1] // 2
for j in range(fre):
word.append(i[0])
if cnt == 0:
print(''.join(word)+ ''.join(word[::-1]))
if cnt == 1:
print(''.join(word)+ middle+ ''.join(word[::-1]))
elif cnt > 1:
print('I\'m Sorry Hansoo')
- 얻어갈 부분
1. join 함수를 활용하기, 리스트 역순으로 출력하려면 [::-1]을 활용하기, 소수점 없이 몫을 출력하려면 // 연산자를 사용하기
'' 따옴 표 내에 '를 쓰려면 \'를 사용하기 등 여러 문법을 사용해볼 수 있었다
'알고리즘(백준)' 카테고리의 다른 글
| [알고리즘/문자열] 9996번 : 한국이 그리울 땐 서버에 접속하지 - python (1) | 2024.01.26 |
|---|---|
| [알고리즘/문자열] 20310번 : 타노스 - python (0) | 2024.01.24 |
| [알고리즘/문자열] 2607번 : 비슷한 단어 - python (0) | 2024.01.22 |
| [알고리즘/문자열] 1515번 : 수 이어 쓰기 - python (0) | 2024.01.22 |
| [알고리즘/문자열] 20920번 : 영단어 암기는 괴로워 - python (0) | 2024.01.21 |