알고리즘

[백준] 10810번 문제 해결

크딩학생 2024. 1. 10. 13:29

 

1. 문제상황

백준 10810번 문제를 풀던 중 아무리 봐도 이해가 되지 않는 오류가 나왔다

수정을 하려 했지만 오류가 해결되지 않아 블로그에 소스 코드를 검색해보았다

 

2. 나의 소스 코드와 해결 방법

import java.util.*;

public class Main {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        int M = scanner.nextInt();
        int[] arr = new int[N];
  
        for(int i = 0 ; i < M ; i++){
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            int c = scanner.nextInt();
            
            for( int d = a ; d <= b ; d++){
                arr[d] = c;
            }
        }
        for( int i = 0 ; i < N ; i++){
            System.out.print(arr[i] + " ");
        }
    }
}

 

문제가 됐던 소스코드이다.

잘못 작성한 부분은 바로 

for(int i = 0 ; i < M ; i++){
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            int c = scanner.nextInt();
            
            for( int d = a ; d <= b ; d++){
                arr[d] = c;
            } // 문제가 됐던 부분
           
}

 

공을 넣을 첫 번째 바구니의 번호인 a, 두 번째 바구니인 b, 공의 번호인 c를 입력받은 후 

순회하며 c 값을 넣을 때 발생했다

 

문제가 요구하는 건 배열 안에 넣는 것이 아니라, 바구니에 넣는 것이었다

바구니의 번호를 -1로 해주어야 했다

 

예를 들자면, 2번 바구니는 컴퓨터에서는 1 인덱스에 위치해 있다

 

따라서 완성한 코드는 아래와 같다 

import java.util.*;

public class Main {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        int M = scanner.nextInt();
        int[] arr = new int[N];
  
        for(int i = 0 ; i < M ; i++){
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            int c = scanner.nextInt();
            
            for( int d = a-1 ; d < b ; d++){
                arr[d] = c;
            }
        }
        for( int i = 0 ; i < N ; i++){
            System.out.print(arr[i] + " ");
        }
    }
}

 

시작 인덱스와 종료 인덱스 모두 -1 해주어야 한다