반응형
https://school.programmers.co.kr/learn/courses/30/lessons/84512?language=java
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
[풀이과정]
처음엔 복잡하게 풀었다가 생각을 바꾸고 훨씬 간단한 코드로 통과했다.
DFS 개념을 가져다가 풂.
[코드]
class Solution {
static int answer = 0;
static int number = 0;
static String[] alphabet = {"A", "E", "I", "O", "U"};
public int solution(String word) {
plus("", word);
return answer;
}
static void plus(String current, String target) {
if (current.equals(target)) {
answer = number;
return;
}
if (current.length() == 5) return;
for (int i = 0; i < 5; i++) {
number++;
plus(current + alphabet[i], target);
if (answer != 0) return; // 이미 찾았으면 빠르게 종료
}
}
}
[코드 - 97.5점]
U가 하나일 때가 예외가 돼서 테케1을 통과하지 못 한 것 같다.
alphabet 배열은 만들어놓고 쓰지를 않음..
뭔가 키가 될 것 같아서 계속 들여다보다가 정답 구조를 생각해냈다.
class Solution {
static StringBuilder numStr = new StringBuilder("A");
public int solution(String word) {
char[] alphabet = {'A', 'E', 'I', 'O', 'U'};
int num = 1;
while(true){
//1. 다섯글자가 아니면
if(numStr.length() < 5){
numStr.append("A");
num++;
}
//2. 다섯글자이면
else{
char lastChar = numStr.charAt(numStr.length() - 1);
changeChar(lastChar);
num++;
}
if(numStr.toString().equals(word)){
break;
}
}
return num;
}
static void changeChar(char lastChar){
switch(lastChar){
case 'A':
numStr.replace(numStr.length() - 1, numStr.length(), "E");
break;
case 'E':
numStr.replace(numStr.length() - 1, numStr.length(), "I");
break;
case 'I':
numStr.replace(numStr.length() - 1, numStr.length(), "O");
break;
case 'O':
numStr.replace(numStr.length() - 1, numStr.length(), "U");
break;
case 'U':
numStr.deleteCharAt(numStr.length() - 1);
changeChar(numStr.charAt(numStr.length() - 1));
break;
}
}
}반응형
'프로그래머스 > 완전탐색' 카테고리의 다른 글
| [프로그래머스] Level 2. 카펫 (0) | 2024.04.11 |
|---|---|
| [프로그래머스] Level 2. 소수 찾기 (0) | 2024.04.08 |
| [프로그래머스] Level 1. 모의고사 (0) | 2024.04.05 |
| [프로그래머스] Level 1. 최소직사각형 (0) | 2024.03.30 |