
내가 생각했을때 문제에서 원하는부분
온라인 서비스를 이용하기 위해서 닉네임이 필요합니다. 이때 닉네임이 될 수 있는 조건은 다음과 같습니다.
닉네임의 길이가 4자 이상 8자 이하여야합니다.
닉네임에는 소문자 l과w, 대문자 O와 W를 사용할 수 없습니다.
이외의 영어 대소문자와 숫자는 모두 사용이 가능합니다.
주어진 solution 함수는 사용할 수 없는 닉네임 nickname을 받아 사용할 수 있는 닉네임으로 바꿔주는 함수입니다.
이때 닉네임을 변경하는 규칙은 다음과 같으며 첫 번째 규칙부터 순서대로 적용합니다.
소문자 l을 대문자 I로 변경합니다.
소문자 w를 두 개의 소문자 v, 즉 vv로 변경합니다.
대문자 W를 두 개의 대문자 V, 즉 VV로 변경합니다.
대문자 O를 숫자 0으로 변경합니다.
수정된 닉네임의 길이가 4 미만일 경우 뒤에 소문자 o를 길이가 4가 될때까지 이어붙입니다.
수정된 닉네임의 길이가 8보다 클 경우 8번째 문자까지만 사용합니다.
주어진 solution 함수에는 위의 규칙 중 올바르게 적용되지 않는 것이 있습니다.
solution 함수가 올바르게 작동하도록 한 줄을 수정해주세요.
내가 이 문제를 보고 생각해본 부분
입력 문자열을 한 문자씩 순회하면서 각각의 문자에 대해 변환 규칙을 적용한다.
소문자 'l'은 대문자 'I'로 바꾼다.
소문자 'w'는 두 글자 "vv"로 바꾼다.
대문자 'W'는 두 글자 "VV"로 바꾼다.
대문자 'O'는 숫자 '0'으로 바꾼다.
위에 해당하지 않는 문자(영대소문자 또는 숫자)는 그대로 이어 붙인다.
변환이 끝난 뒤 결과 문자열의 길이를 검사한다.
길이가 4보다 짧으면 소문자 'o'를 필요한 만큼 반복해서 뒤에 붙여 길이를 4로 맞춘다.
길이가 8보다 크면 앞에서부터 8자만 남기고 잘라서 사용한다.
최종적으로 규칙을 적용한 문자열을 반환한다.
코드로 구현
class Solution {
public String solution(String nickname) {
String answer = "";
for(int i=0; i<nickname.length(); i++){
if(nickname.charAt(i) == 'l'){
answer += "I";
}
else if(nickname.charAt(i) == 'w'){
answer += "vv";
}
else if(nickname.charAt(i) == 'W'){
answer += "VV";
}
else if(nickname.charAt(i) == 'O'){
answer += "0";
}
else{
answer += nickname.charAt(i);
}
}
while(answer.length() < 4){
answer += "o";
}
if(answer.length() > 8){
answer = answer.substring(0, 8);
}
return answer;
}
}
프로그래머스 코드
package programmers;
// 프로그래머스 8번 닉네임 규칙
public class Main8 {
public static String solution(String nickname) {
String answer = "";
for (int i = 0; i < nickname.length(); i++) {
char c = nickname.charAt(i);
if (c == 'l') {
answer += "I";
} else if (c == 'w') {
answer += "vv";
} else if (c == 'W') {
answer += "VV";
} else if (c == 'O') {
answer += "0";
} else {
answer += c;
}
}
// 길이가 4 미만이면 'o'를 필요한 만큼 반복해서 붙임
while (answer.length() < 4) {
answer += "o";
}
// 길이가 8 초과면 앞에서부터 8자만 사용
if (answer.length() > 8) {
answer = answer.substring(0, 8);
}
return answer;
}
public static void main(String[] args) {
String[] tests = {
"WORLDworld", // "VV0RLDvv"
"GO", // "G0oo"
"a", // "aooo"
"lwwO", // 변환 과정 확인
"llll" // 여러 치환 확인
};
for (String t : tests) {
System.out.println("입력: \"" + t + "\" -> 출력: \"" + solution(t) + "\"");
}
}
}
위에 있는 코드를 변경한 코드
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.