작성
·
83
0
안녕하세요! 비밀번호 문제를 다음과 같이 풀었는데 확인 한번 부탁드려도될까요~?
class Solution {
public int solution(int[] keypad, String password) {
int answer = 0;
char[] pw = password.toCharArray();
int[] index = new int[pw.length];
for (int i = 0; i < 9; i++) {
for (int j = 0; j < pw.length; j++) {
if (pw[j] - '0' == keypad[i]) {
index[j] = i;
}
}
}
for (int i = 0; i < index.length - 1; i++) {
int curr = index[i];
if (curr == index[i + 1]) {
continue;
}
if (curr % 3 == 0) { // left
if (index[i + 1] - curr == -3 || index[i + 1] - curr == -2 || index[i + 1] - curr == 1 ||
index[i + 1] - curr == 3 || index[i + 1] - curr == 4) {
answer++;
} else {
answer += 2;
}
} else if (curr % 3 == 1) { // center
if (index[i + 1] - curr >= -4 && index[i + 1] - curr <= 4) {
answer++;
} else {
answer += 2;
}
} else if (curr % 3 == 2) { // right
if (index[i + 1] - curr == -4 || index[i + 1] - curr == -3 || index[i + 1] - curr == -1 ||
index[i + 1] - curr == 2 || index[i + 1] - curr == 3) {
answer++;
} else {
answer += 2;
}
}
}
return answer;
}
public static void main(String[] args) {
Solution T = new Solution();
System.out.println(T.solution(new int[]{2, 5, 3, 7, 1, 6, 4, 9, 8}, "7596218"));
System.out.println(T.solution(new int[]{1, 5, 7, 3, 2, 8, 9, 4, 6}, "63855526592"));
System.out.println(T.solution(new int[]{2, 9, 3, 7, 8, 6, 4, 5, 1}, "323254677"));
System.out.println(T.solution(new int[]{1, 6, 7, 3, 8, 9, 4, 5, 2}, "3337772122"));
}
}
0 1 2
3 4 5
6 7 8
패스워드의 각 문자에 대해 인덱스 번호를 구한 뒤 왼쪽, 가운데, 오른쪽임에 따라 다음 값과의 차이를 비교하여 +1인지 +2인지 구분하는 형태로 코드를 작성해봤습니다.
강사님이 풀이해주신 방식과는 다소 차이가 있어보여서 어떤 방식이 괜찮은지 혹은 위 방식에 문제점이 있는지 궁금하여 질문 올려봅니다
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
비밀번호 문제에 대한 님의 접근 방식을 살펴보았습니다.
제공해주신 코드는 주어진 키패드 배열과 비밀번호 문자열을 이용하여,
비밀번호의 각 숫자가 키패드에서 얼마나 떨어져 있는지를 계산하여 이동 횟수를 구하는 알고리즘입니다.
코드의 로직을 살펴본 결과, 대체적으로 올바른 접근 방식을 사용하셨습니다.
키패드의 숫자 리맵핑(index 재구성), 숫자 간 이동 거리 계산 로직에서의 조건 분기 처리 등이 적절해 보입니다.
다만, 정확한 동작 여부는 입력 값과 함께 테스트 케이스를 통해 확인해보는 것이 좋겠습니다.
하지만 코드의 정확성이나 효율성 측면에서 더 개선할 수 있는 부분이 있는지,
또는 강사님의 풀이 방식과 비교했을 때의 차이점에 따른 장단점은 구체적인 풀이 방식을 알아야 비교 분석할 수 있습니다.
키패드의 위치를 좌표로 생각하고 거리를 계산하는 방식,
또는 더 수학적이고 효율적인 접근 방식을 사용하는 등 다양한 방법이 있을 수 있습니다.
님의 코드가 정상 작동하며, 요구사항을 만족한다면 좋은 접근 방식 중 하나라고 볼 수 있습니다.
만약 성능 개선이 필요하거나 더 나은 접근 방식에 대해 고민하고 싶다면,
강사님의 풀이와 대비해보며 성능이나 가독성 면에서 어떤 차이가 있는지 분석해보는 것을 추천드립니다.
알고리즘 문제 해결 시 다양한 접근 방식을 시도해보는 것은 매우 좋은 학습 방법입니다.
더 궁금한 점이 있으시다면 언제든 질문해주시기 바랍니다.