풀이
알파벳 26개를 인덱스로 갖는 배열 만들기
- 대문자 알파벳 26개만 입력값으로 주어지기에, 26개의 배열을 만들어 A부터 Z까지 각각 0~25의 인덱스로 설정하여 알파벳 개수를 요소로 설정한다.
- 따라서 Swift의 경우에는 asciiValue와 Unicode.Scalar를, Python의 경우에는 ord와 chr를 적절히 설정하여 알파벳에 해당하는 인덱스를 알맞게 접근해야 한다.
문자의 개수가 홀수인 문자는 0 또는 1이어야 한다.
- 펠린드롬에서 알파벳 개수가 홀수인 문자는 무조건 펠린드롬의 가운데 글자가 되어야 한다.
- 만약 개수가 홀수인 문자가 2개 이상이면, 해당 글자 모두 정가운데에 위치해야 하는데 그러면 펠린드롬이 성립할 수가 없다.
코드
Swift
import Foundation
func solution(_ word: String) -> String {
// 알파벳 A~Z의 개수에 해당하는 배열 할당
var countArray = Array(repeating: 0, count: 26)
// 문자의 개수가 홀수인 문자와 그에 대한 플래그 초기화
var oddCharacter = ""
var oddCharFlag = 0
// 결괏값 초기화
var result = ""
// 주어진 단어를 반복하여 알파벳 개수에 대한 배열을 입력
for char in word {
let asciiIndex = Int(char.asciiValue!) - 65
countArray[asciiIndex] += 1
}
for i in 0..<countArray.count {
// 해당 문자의 개수의 절반만큼 결괏값에 연결
let halfCount = countArray[i] / 2
for _ in 0..<halfCount {
result += String(Unicode.Scalar(i + 65)!)
}
// 문자의 개수가 홀수인 문자가 있으면 해당 문자와 상태를 업데이트
if countArray[i] % 2 == 1 {
oddCharacter = String(Unicode.Scalar(i + 65)!)
oddCharFlag += 1
}
}
// 문자의 개수가 홀수인 문자의 수가 1을 넘으면 팰린드롬이 아니므로 에러 출력
if oddCharFlag > 1 {
result = "I'm Sorry Hansoo"
} else { // 반쪽 길이에 문자 개수가 홀수인 문자(없을 경우 공백)와 반쪽의 정반대를 연결
result += oddCharacter + String(result.reversed())
}
// 결괏값 출력
return result
}
let input = readLine()!
print(solution(input))
Python
import sys
def solution(word):
alpha_count = [0 for _ in range(26)]
odd_alpha = ""
half_word = ""
result = ""
for char in word:
alpha_count[ord(char) - 65] += 1
for i in range(26):
alphabet = chr(i + 65)
if alpha_count[i] % 2 == 1:
odd_alpha += alphabet
for _ in range(alpha_count[i] // 2):
half_word += alphabet
if len(odd_alpha) > 1:
result = "I'm Sorry Hansoo"
else:
result += half_word + odd_alpha + half_word[::-1]
return result
# sys.stdin = open("input.txt", "r")
# input = sys.stdin.readline
word = input()
print(solution(word))
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준] (Python) 1193번: 분수찾기 (0) | 2023.05.22 |
---|---|
[백준] (Swift) 20546번 기적의 매매법 (0) | 2023.05.19 |
[백준] (Swift) N과 M (2) (0) | 2023.04.30 |
[백준] (Swift) 7785번: 회사에 있는 사람 (0) | 2023.04.13 |
[백준] (Swift) 14425번: 문자열 집합 (0) | 2023.04.11 |
댓글