728x90
코딩 테스트 풀이 체크리스트 |
|
2시간 내에 풀었는가? | X |
본인의 실력으로 풀었는가? | O |
코딩테스트 연습 - 조이스틱
조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다
programmers.co.kr
class Solution {
String word = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //알파벳 위치 찾기 위해서
int answer = Integer.MAX_VALUE; //가장 큰 값으로 설정
String[] names; //name 나눌 용도
boolean[] check; //다녀왔는지 확인 용도
public int solution(String name) {
names = name.split("");
check = new boolean[names.length];
int all = 0;
//names 확인하면서 A는 굳이 들를 필요 없으니까 미리 check에 true 표시하고,
//바꿔야할 알파벳들 개수 구하기
for (int i = 0; i < names.length; i++) {
if (names[i].equals("A")) check[i] = true;
if (!names[i].equals("A")) all++;
}
//함수 호출
func(all, 0, 0);
return answer;
}
public void func(int num, int p, int count) {
if (num == 0) { //다 바꿨으면 answer 값 바꾸기
answer = Math.min(count, answer);
return;
}
int r = right(p); //오른쪽으로 이동했을 경우 바꿀 위치
int l = left(p); //왼쪽으로 이동했을 경우 바꿀 위치
//오른쪽으로 이동하는 경우의 함수호출
check[r] = true;
int rCount = (p <= r) ? r - p : names.length - p + r; //r의 위치까지 이동 수
int rIndex = word.indexOf(names[r]); //위로 알파벳을 바꿨을 때
int anotherR = 26 - rIndex; //아래로 알파벳을 바꿨을 때
func(num-1, r, count + rCount + Math.min(rIndex, anotherR));
check[r] = false;
//왼쪽으로 이동하는 경우의 함수호출
check[l] = true;
int lCount = (p >= l) ? p - l : p + names.length - l; //l의 위치까지 이동 수
int lIndex = word.indexOf(names[l]); //위로 알파벳을 바꿨을 때
int anotherL = 26 - lIndex; //아래로 알파벳을 바꿨을 때
func(num-1, l, count + lCount + Math.min(lIndex, anotherL));
check[l] = false;
}
public int right(int p) {
for (int i = p; i < names.length; i++) {
if (check[i]) continue;
return i;
}
for (int i = 0; i < p; i++) {
if (check[i]) continue;
return i;
}
return p;
}
public int left(int p) {
for (int i = p; i >= 0; i--) {
if (check[i]) continue;
return i;
}
for (int i = names.length - 1; i >= 0; i--) {
if (check[i]) continue;
return i;
}
return p;
}
}
테스트 1 〉 | 통과 (0.15ms, 76.1MB) |
테스트 2 〉 | 통과 (0.34ms, 77.6MB) |
테스트 3 〉 | 통과 (0.15ms, 85MB) |
테스트 4 〉 | 통과 (0.54ms, 71.3MB) |
테스트 5 〉 | 통과 (1.18ms, 79.7MB) |
테스트 6 〉 | 통과 (0.32ms, 73.9MB) |
테스트 7 〉 | 통과 (0.58ms, 74.4MB) |
테스트 8 〉 | 통과 (0.13ms, 76.5MB) |
테스트 9 〉 | 통과 (0.31ms, 73MB) |
테스트 10 〉 | 통과 (0.20ms, 74.8MB) |
테스트 11 〉 | 통과 (0.16ms, 73MB) |
테스트 12 〉 | 통과 (0.13ms, 75.3MB) |
테스트 13 〉 | 통과 (0.28ms, 76.6MB) |
테스트 14 〉 | 통과 (0.24ms, 73.3MB) |
테스트 15 〉 | 통과 (0.16ms, 75.7MB) |
테스트 16 〉 | 통과 (0.16ms, 73MB) |
테스트 17 〉 | 통과 (0.12ms, 77MB) |
테스트 18 〉 | 통과 (0.24ms, 71.7MB) |
테스트 19 〉 | 통과 (0.19ms, 80.8MB) |
테스트 20 〉 | 통과 (0.18ms, 73.4MB) |
테스트 21 〉 | 통과 (0.12ms, 73.3MB) |
테스트 22 〉 | 통과 (0.18ms, 72.7MB) |
테스트 23 〉 | 통과 (0.16ms, 71.9MB) |
테스트 24 〉 | 통과 (0.15ms, 84.8MB) |
테스트 25 〉 | 통과 (0.18ms, 79.2MB) |
테스트 26 〉 | 통과 (0.15ms, 73.7MB) |
테스트 27 〉 | 통과 (0.13ms, 75.4MB) |
728x90
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 - 네트워크 (3단계) (0) | 2022.05.27 |
---|---|
[Java] 프로그래머스 - 정수 삼각형 (3단계) (0) | 2022.05.26 |
[Java] 프로그래머스 - 소수 찾기 (2단계) (0) | 2022.05.24 |
[Java] 프로그래머스 - 가장 큰 수 (2단계) (0) | 2022.05.23 |
[Java] 프로그래머스 - 디스크 컨트롤러 (3단계) (0) | 2022.05.17 |