"비밀번호" 문제 확인 부탁드립니다!
170
1 asked
안녕하세요! 비밀번호 문제를 다음과 같이 풀었는데 확인 한번 부탁드려도될까요~?
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인지 구분하는 형태로 코드를 작성해봤습니다.
강사님이 풀이해주신 방식과는 다소 차이가 있어보여서 어떤 방식이 괜찮은지 혹은 위 방식에 문제점이 있는지 궁금하여 질문 올려봅니다
Answer 1
0
안녕하세요, 인프런 AI 인턴입니다.
비밀번호 문제에 대한 님의 접근 방식을 살펴보았습니다.
제공해주신 코드는 주어진 키패드 배열과 비밀번호 문자열을 이용하여,
비밀번호의 각 숫자가 키패드에서 얼마나 떨어져 있는지를 계산하여 이동 횟수를 구하는 알고리즘입니다.
코드의 로직을 살펴본 결과, 대체적으로 올바른 접근 방식을 사용하셨습니다.
키패드의 숫자 리맵핑(index 재구성), 숫자 간 이동 거리 계산 로직에서의 조건 분기 처리 등이 적절해 보입니다.
다만, 정확한 동작 여부는 입력 값과 함께 테스트 케이스를 통해 확인해보는 것이 좋겠습니다.
하지만 코드의 정확성이나 효율성 측면에서 더 개선할 수 있는 부분이 있는지,
또는 강사님의 풀이 방식과 비교했을 때의 차이점에 따른 장단점은 구체적인 풀이 방식을 알아야 비교 분석할 수 있습니다.
키패드의 위치를 좌표로 생각하고 거리를 계산하는 방식,
또는 더 수학적이고 효율적인 접근 방식을 사용하는 등 다양한 방법이 있을 수 있습니다.
님의 코드가 정상 작동하며, 요구사항을 만족한다면 좋은 접근 방식 중 하나라고 볼 수 있습니다.
만약 성능 개선이 필요하거나 더 나은 접근 방식에 대해 고민하고 싶다면,
강사님의 풀이와 대비해보며 성능이나 가독성 면에서 어떤 차이가 있는지 분석해보는 것을 추천드립니다.
알고리즘 문제 해결 시 다양한 접근 방식을 시도해보는 것은 매우 좋은 학습 방법입니다.
더 궁금한 점이 있으시다면 언제든 질문해주시기 바랍니다.
비밀번호
0
65
1
과일 가져가기 이러한 경우에는 반례가 생기지 않나요?
0
161
2
cpu 스케줄링
0
105
2
외부 문제 질문
0
122
2
가장 많이 사용된 회의실
0
117
2
심사위원 문제 시간복잡도 질문
0
127
1
현관문 출입순서
0
96
1
미로의 최단거리 통로
0
74
1
집으로 이동 문제 코드
0
124
1
채점 사이트 개설
0
161
2
송아지를 잡자
1
110
1
다익스트라 + 환승횟수
0
135
2
문제풀이 해설 질문입니다.
0
124
2
"이동 횟수" 문제가 변형된다면?
0
155
2
예제 3번의 정답이 이해가 되지 않아요 선생님 ㅜㅜ
0
248
1
최대 길이 연속수열 질문
0
192
1
잃어버린 강아지 문제 count 관련 질문있습니다
0
202
1
바둑대회 질문입니당
0
221
1
5. "최대 길이 바이토닉 수열" 에서 설명해주신 방법과 제가 직접 구현한 방법이 달라, 확인 한번 부탁드립니다
0
310
1
알파코드 풀이질문입니다
0
216
1
7번 비밀 번호 문제에 시간복잡도가 궁금합니다!
0
162
1
혹시 이렇게 작성해도 괜찮나요?
0
285
2
문제풀이 확인 부탁드립니다.
0
244
1
혼자서 푼 문제 확인 부탁드립니다.
0
298
1

