안녕하세요.
오늘은 프로그래머스의 코딩테스트 lv.0단계 중에 숫자 찾기를 공부해보겠습니다.
언어는 Java로 구현하였습니다.
문제 설명
정수 num과 k가 매개변수로 주어질 때, num을 이루는 숫자 중에 k가 있으면 num의 그 숫자가 있는 자리 수를 return하고 없으면 -1을 return 하도록 solution 함수를 완성해보세요.
제한 사항
입출력 예
num | k | result |
29183 | 1 | 3 |
232443 | 4 | 4 |
123456 | 7 | -1 |
문제 풀이
매개변수 num에 매개변수 k가 포함되어 있는지 확인하기 위해 먼저 num을 문자열로 변환하였습니다.
문자열로 변환한 뒤 자릿수를 확인하고 해당 자릿수만큼의 배열을 선언하여 각 자릿수를 배열에 하나씩 저장하였습니다.
이후 반복문을 통해 배열의 각 자리와 k를 비교하며 일치하는 경우 해당 인덱스를 저장하고 찾는 순간 반복문을 종료하여 결과를 반환하도록 구현하였습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
class Solution {
public int solution(int num, int k) {
int answer = -1;
String str = String.valueOf(num);
int[] arr = new int[str.length()];
for(int i = 0; i < str.length(); i++) {
arr[i] = str.charAt(i) - '0';
}
for(int i = 0; i < arr.length; i++) {
if(arr[i] == k) {
answer = i + 1;
break;
}
}
return answer;
}
}
|
추가 풀이
이번에는 배열을 사용하지 않고 수학적 연산을 활용한 방식으로 문제를 해결해보았습니다.
또한 다른 분들의 풀이 중에 Java의 내장 메서드를 활용한 간결한 방법이 있어 함께 정리해보았습니다.
첫번째는 수학적 연산을 활용한 풀이법입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
class Solution {
public int solution(int num, int k) {
int answer = -1;
int count = 0;
while(num != 0) {
if((num % 10) == k) {
answer = count;
}
num = num / 10;
count++;
}
if(answer != -1) {
answer = count - answer;
}
return answer;
}
}
|
이 풀이는 num을 문자열로 변환하지 않고 나머지(%)와 나눗셈(/)을 이용하여 각 자릿수를 뒤에서부터 하나씩 확인하는 방식입니다.
문자열 변환 없이 숫자 자체로 처리하므로 메모리 측면에서 유리할 수 있습니다.
두번째는 내장 함수를 활용한 풀이법입니다.
1
2
3
4
5
|
class Solution {
public int solution(int num, int k) {
return ("-" + num).indexOf(String.valueOf(k));
}
}
|
이 풀이는 Java의 내장함수인 indexOf()와 valueOf()를 사용하여 문제를 해결한 방식으로 짧고 간단하며 문자열 처리에 익숙한 경우 유용하게 활용할 수 있습니다.
" - "와 같은 더미 문자를 앞에 붙여주는 이유는, indexOf()가 0부터 시작하므로 k가 존재하지 않을 때 -1을 반환하는 동작을 유지하면서도 index 값을 1부터 셀 수 있도록 하기 위함입니다.
사용 함수
마무리 정리
이번 문제는 문자열과 배열로 변환과 반복문을 활용해 비교적 간단하게 해결할 수 있었습니다.
또한 수학적 연산이나 내장 함수를 활용하면 메모리 효율성과 코드 가독성 측면에서 더 나은 코드 작성이 가능하다는 점을 느꼈습니다.
이상으로 프로그래머스 Lv.0 - 숫자 찾기 문제 풀이를 마치겠습니다.
감사합니다.
[프로그래머스] Lv.0 - 문자열 정렬하기(2) (1) | 2025.05.14 |
---|---|
[프로그래머스] Lv.0 - 약수 구하기 (0) | 2025.05.13 |
[프로그래머스] Lv.0 - 분수의 덧셈 (0) | 2025.04.04 |
[프로그래머스] Lv.0 - 인덱스 바꾸기 (0) | 2023.03.09 |
[프로그래머스] Lv.2 - 올바른 괄호 (0) | 2023.03.03 |
댓글 영역