[PCCE 기출문제] 8번 / 닉네임 규칙

2024. 9. 18. 18:00PCCE 기출문제

https://school.programmers.co.kr/learn/courses/30/lessons/340200

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


문제 설명
온라인 서비스를 이용하기 위해서 닉네임이 필요합니다. 이때 닉네임이 될 수 있는 조건은 다음과 같습니다.

  • 닉네임의 길이가 4자 이상 8자 이하여야합니다.
  • 닉네임에는 소문자 l과w, 대문자 O와 W를 사용할 수 없습니다.
  • 이외의 영어 대소문자와 숫자는 모두 사용이 가능합니다.

주어진 solution 함수는 사용할 수 없는 닉네임 nickname을 받아 사용할 수 있는 닉네임으로 바꿔주는 함수입니다. 이때 닉네임을 변경하는 규칙은 다음과 같으며 첫 번째 규칙부터 순서대로 적용합니다.

  1. 소문자 l을 대문자 I로 변경합니다.
  2. 소문자 w를 두 개의 소문자 v, 즉 vv로 변경합니다.
  3. 대문자 W를 두 개의 대문자 V, 즉 VV로 변경합니다.
  4. 대문자 O를 숫자 0으로 변경합니다.
  5. 수정된 닉네임의 길이가 4 미만일 경우 뒤에 소문자 o를 길이가 4가 될때까지 이어붙입니다.
  6. 수정된 닉네임의 길이가 8보다 클 경우 8번째 문자까지만 사용합니다.

주어진 solution 함수에는 위의 규칙 중 올바르게 적용되지 않는 것이 있습니다. solution 함수가 올바르게 작동하도록 한 줄을 수정해주세요.


제한사항

  • 1 ≤ nickname의 길이 ≤ 10
  • nickname은 영어 대소문자와 숫자로만 이루어져있습니다.

입출력 예

nickname result
"WORLDworld" "VV0RLDvv"
"GO" "G0oo"

입출력 예 설명
입출력 예 #1

  • 닉네임 "WORLDworld"는 1, 2, 3, 4, 6 단계를 거쳐 "VV0RLDvv"가 됩니다.
  • "WORLDworld" -> "WORLDworId" -> "WORLDvvorId" -> "VVORLDvvorId" -> "VV0RLDvvorId" -> "VV0RLDvv"

입출력 예 #2

  • 닉네임 "GO"는 4, 5 단계를 거쳐 "G0oo"가 됩니다.
  • "GO" -> "G0" -> "G0oo"

디버깅(Debugging) 문제 안내

  • 디버깅(Debugging)은 이미 완성된 코드에서 버그를 찾아 수정하는 문제 타입입니다.
  • 1줄만 수정하여 버그를 고치세요.
  • 2줄 이상 수정할 경우, 실행 결과에 에러 메시지가 표시됩니다.

문제 코드

def solution(nickname):
    answer = ""
    for letter in nickname:
        if letter == "l":
            answer += "I"
        elif letter == "w":
            answer += "vv"
        elif letter == "W":
            answer += "VV"
        elif letter == "O":
            answer += "0"
        else:
            answer += letter
    if len(answer) < 3:
        answer += "o"
    if len(answer) > 8:
        answer = answer[:8]
    return answer

유저가 입력한 닉네임을 생성 규칙에 맞게 변환해주는 코드를 작성하는 문제입니다.

각각의 규칙을 모두 통과해야 하고, 규칙을 통과하지 못할 시 변환 규칙을 적용해서 올바른 닉네임으로 변환해주네요.

 

문제 코드를 실행시켜본다면 다음과 같은 결과가 나옵니다.

테스트 1
입력값 〉 "WORLDworld"
기댓값 〉 "VV0RLDvv"
실행 결과 〉 테스트를 통과하였습니다.

테스트 2
입력값 〉 "GO"
기댓값 〉 "G0oo"
실행 결과 〉 실행한 결괏값 "G0o"이 기댓값 "G0oo"과 다릅니다.

 

실행 결과를 살펴보니 G0oo이 나와야 하는데, o가 하나만 추가된 G0o가 나오는 것을 확인할 수 있습니다.

문제 코드를 확인해본 결과, "수정된 닉네임의 길이가 4 미만일 경우 뒤에 소문자 o를 길이가 4가 될때까지 이어붙입니다."의 규칙이 한 번만 적용되는 것을 확인할 수 있었습니다.

따라서 해당 조건을 만족하도록, 반복문으로 코드를 수정해주면 됩니다.

 

정답 코드를 작성해보겠습니다.

def solution(nickname):
    answer = ""
    for letter in nickname:
        if letter == "l":
            answer += "I"
        elif letter == "w":
            answer += "vv"
        elif letter == "W":
            answer += "VV"
        elif letter == "O":
            answer += "0"
        else:
            answer += letter
    while len(answer) <= 3:
        answer += "o"
    if len(answer) > 8:
        answer = answer[:8]
    return answer

 

while 반복문을 사용하여 answer의 길이가 3 이하일 때, 4가 될 때까지 answer에 소문자 o를 추가해주도록 코드를 수정했습니다.

길이가 3 이하일 때까지 이외에도 3이 아닌 동안까지: len(answer) != 3, 4 미만일 때까지: len(answer) < 4 등 다양하게 조건을 설정하실 수 있습니다.