URL https://programmers.co.kr/learn/courses/33/lessons/1860
문제 설명
- 문자열이 주어졌을 때, 문자열에서 ‘a’는 ‘z’로, ‘z’는 ‘a’로 바꾸려고 합니다. 예를 들어 주어진 문자열이 “abz”라면 “zba”라는 문자열을 만들면 됩니다.
- 문자열 s가 매개변수로 주어졌을 때, 문자열에서 ‘a’는 ‘z’로, ‘z’는 ‘a’로 바꾸어 return 하도록 solution 함수를 작성했습니다. 그러나, 코드 일부분이 잘못되어있기 때문에, 몇몇 입력에 대해서는 올바르게 동작하지 않습니다. 주어진 코드에서 한 줄만 변경해서 모든 입력에 대해 올바르게 동작하도록 수정하세요.
매개변수 설명
- 문자열 s가 solution 함수의 매개변수로 주어집니다.
- 문자열 s는 알파벳 소문자로만 이루어져 있으며 길이는 1 이상 100 이하입니다.
return 값 설명
- solution 함수는 문자열에서 ‘a’는 ‘z’로, ‘z’는 ‘a’로 바꾼 후 return 합니다.
수정할 코드
1
2
3
4
5
6
7
8
9
def solution(s):
s_lst = list(s)
n = len(s)
for i in range(n):
if s_lst[i] == 'a':
s_lst[i] = 'z'
if s_lst[i] == 'z':
s_lst[i] = 'a'
return "".join(s_lst)
문제 풀이
- 주어진 코드에서 1줄만 수정하여 정상작동하는 코드를 만들어내는 문제이다.
- 수정할 코드에서 if문이 2개가 되어 a가 z로 바뀌고 다시 z가 a로 바뀌게 되어있다. if문이 중복됨
- 따라서 2번째 if를 elif로 바꾸어서 if문 중복을 피하거나, 첫번째 if문 뒤에 continue를 넣어 처음 if문이 되면 다시 for문이 도는것으로 해야한다.
- 다만 continue 다만 프로그래머스에서 줄 추가가 안되어 해당 솔루션은 사용 못하긴 함.
1
2
3
4
5
6
7
8
9
10
# answer 1
def solution(s):
s_lst = list(s)
n = len(s)
for i in range(n):
if s_lst[i] == 'a':
s_lst[i] = 'z'
elif s_lst[i] == 'z': # 해당 부분 수정
s_lst[i] = 'a'
return "".join(s_lst)
1
2
s = "abz"
solution(s)
1
'zba'
1
2
3
4
5
6
7
8
9
10
11
# answer 2, 다만 프로그래머스에서 줄 추가가 안되어 해당 솔루션은 사용 못하긴 함.
def solution(s):
s_lst = list(s)
n = len(s)
for i in range(n):
if s_lst[i] == 'a':
s_lst[i] = 'z'
continue # 해당 부분 수정
if s_lst[i] == 'z':
s_lst[i] = 'a'
return "".join(s_lst)
1
2
s = "abz"
solution(s)
1
'zba'