프로그래머스 가까운 1 찾기

KIMYEONGJUN·2026년 6월 10일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

정수 배열 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
    }
}

위에 있는 코드를 변경한 코드

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글