
내가 생각했을때 문제에서 원하는부분
정수 배열 arr가 주어집니다. 이때 arr의 원소는 1 또는 0입니다.
정수 idx가 주어졌을 때, idx보다 크거나 같으면서 배열의 값이 1인 가장 작은 인덱스를 찾아서 반환하는 solution 함수를 완성해 주세요.
단, 만약 그러한 인덱스가 없다면 -1을 반환합니다.
내가 이 문제를 보고 생각해본 부분
solution 메서드는 두 개의 매개변수를 받는다. 정수 배열 arr과 탐색 시작 인덱스 idx다.
이 메서드는 idx부터 배열 끝까지 반복문을 실행하면서, 배열 요소가 1인 첫 번째 위치를 찾는다.
만약 arr[i]가 1이라면 바로 그 인덱스 i를 반환한다.
만약 끝까지 찾아도 1이 없으면 -1을 반환한다.
이렇게 해서 idx 이상의 위치에서 가장 가까운 1의 인덱스를 찾는 기능을 수행한다.
main 메서드에서는 클래스의 인스턴스를 만들어 solution 메서드를 호출하는 테스트를 세 번 한다.
첫 번째 테스트는 배열 [0, 0, 0, 1]에서 인덱스 1부터 검색하여 결과는 3이다.
두 번째 테스트는 배열 [1, 0, 0, 1, 0, 0]에서 인덱스 4부터 검색하였으나 1이 없어서 -1을 출력한다.
세 번째 테스트는 배열 [1, 1, 1, 1, 0]에서 인덱스 3부터 시작하여 3을 반환한다.
코드로 구현
class Solution {
public int solution(int[] arr, int idx) {
for (int i = idx; i < arr.length; i++) {
if (arr[i] == 1) {
return i;
}
}
return -1;
}
}
프로그래머스 코드
package programmers;
// 프로그래머스 가까운 1 찾기
public class Main47 {
public int solution(int[] arr, int idx) {
for (int i = idx; i < arr.length; i++) {
if (arr[i] == 1) {
return i; // idx 이상에서 1이 처음 나오는 인덱스 반환
}
}
return -1; // 없으면 -1 반환
}
public static void main(String[] args) {
Main47 sol = new Main47();
// 테스트용 예시
int[] arr1 = {0, 0, 0, 1};
int idx1 = 1;
System.out.println(sol.solution(arr1, idx1)); // 출력: 3
int[] arr2 = {1, 0, 0, 1, 0, 0};
int idx2 = 4;
System.out.println(sol.solution(arr2, idx2)); // 출력: -1
int[] arr3 = {1, 1, 1, 1, 0};
int idx3 = 3;
System.out.println(sol.solution(arr3, idx3)); // 출력: 3
}
}
위에 있는 코드를 변경한 코드
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.