본문 바로가기
알고리즘/백준 solved.ac PS

[백준][solved.ac][Bronze 2][Python] 17502번 : 클레어와 팰린드롬

by 빛밤하늘 2021. 7. 3.
반응형

밑의 링크는 백준에서의 문제 링크입니다.

 

17502번: 클레어와 팰린드롬

입력으로 주어진 문자열을 팰린드롬이 되도록 '?' 문자들을 적절한 알파벳 소문자들로 바꾸어 출력합니다. 방법이 여러 가지인 경우 그 중 하나만 출력합니다.

www.acmicpc.net

 

 

 

 

 

 

 

 

파이썬 코드와 결과입니다.

# readline을 사용하기 위해 import합니다.
from sys import stdin


# 첫 번째 줄에 문자열의 길이 N을 입력합니다.
# 1 <= N <= 100
# 정수형으로 변환합니다.
N = int(stdin.readline())
# 두 번째 줄에는 일부 문자들이 지워진 길이가 N인 팰린드롬 문자열을 입력합니다.
# 각 문자는 알파벳 소문자이거나 '?'입니다.
# 맨 끝의 \n은 떼어주고 리스트 변수로 만들어줍니다.
palindrome = list(stdin.readline().rstrip())

# 팰린드롬의 길이 N의 절반만큼 반복합니다.
for idx in range(N // 2):
    # 팰린드롬의 현재 인덱스의 문자는 ?가 아닌데, 현재 인덱스를 끝부터 세었을 때의 문자는 ?라면 
    if palindrome[idx] != '?' and palindrome[-idx-1] == '?':
        # 현재 인덱스를 끝부터 세었을 때의 문자를 현재 인덱스의 문자로 바꿔줍니다.
        palindrome[-idx-1] = palindrome[idx]
    # 팰린드롬의 현재 인덱스의 문자는 ?인데, 현재 인덱스를 끝부터 세었을 때의 문자는 ?가 아니라면 
    elif palindrome[idx] == '?' and palindrome[-idx-1] != '?':
        # 현재 인덱스의 문자를 현재 인덱스를 끝부터 세었을 때의 문자로 바꿔줍니다.
        palindrome[idx] = palindrome[-idx-1]
    # 팰린드롬의 현재 인덱스의 문자와 현재 인덱스를 끝부터 세었을 때의 문자 모두 ?라면 
    elif (palindrome[idx], palindrome[-idx-1]) == ('?', '?'):
        # 현재 인덱스의 문자와 현재 인덱스를 끝부터 세었을 때의 문자를 모두 a로 바꿔줍니다.
        palindrome[idx] = 'a'
        palindrome[-idx-1] = 'a'

# 팰린드롬의 길이가 홀수일 때, 가운데 글자가 ?라면
if palindrome[N // 2] == '?':
    # 가운데 글자를 a로 바꿔줍니다.
    palindrome[N // 2] = 'a'

# 팰린드롬이 된 문자열을 출력합니다.
print(''.join(palindrome))

결과

 

첫 번째 제출했을 때는 조건문에서 마지막 조건인 elif (palindrome[idx], palindrome[-idx-1]) == ('?', '?')을

그냥 else로 처리했더니 틀렸습니다 결과가 나왔습니다.

 

 

 

※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.

※ 더 효율적이고 빠른 정답을 환영합니다.

반응형

댓글