문제
문제 이해
문제를 제대로 이해하는 것 부터 시작해야 할 것 같다.
위에서 보여준 예제를 통해 간단히 요약하자면,
5 4 => 5개의 바구니가 있고, 공을 4번의 방법으로 넣는다.
1 2 3 => 1번부터 2번까지의 바구니에 3번 공을 넣는다. 즉 현재 상태는 3 3 0 0.0 이 되는 것
3 4 4 => 위와 같은 원리로 3번부터 4번까지의 바구니에 4번 공을 넣음. 즉 3 3 4 4 0
1 4 1 => 1번부터 4번까지 1번 공! 현재 상태는 1 1 1 1 0
2 2 2 => 2번부터 2번까지 2번 공을 넣어줌. 즉 결과 : 1 2 1 1 0 이 출력되는 것!
문제 해결
그럼 이를 코드로 어떻게 구현해야 할까?
우선 바구니의 개수와 공을 몇 번의 방법으로 넣을지 입력을 받아야 한다.
Scanner in = new Scanner(System.in);
int N = in.nextInt(); //바구니 개수
int M = in.nextInt(); //공을 넣는 방법의 수
배열 생성 ( 바구니 개수 + 1 )
int [] array = new int[N+1];
3개의 정수 입력 받기 ( 시작 번호 / 끝 번호 / 공 번호 )
int start = 0;
int end = 0;
int ball = 0;
M만큼 start, end, ball을 입력 받아야하므로 for 문 사용해 입력받고, 공의 번호를 해당 바구니들에 저장★
for (int i = 0; i < M; i++) {
start = in.nextInt();
end = in.nextInt();
ball = in.nextInt();
for(int j = start; j <= end; j++) { //입력 받은 공의 번호(ball)를 start부터 end까지 저장
array[j] = ball;
}
}
최종적으로 바구니에 담김 숫자들 출력하는 코드
for(i=1; i < array.length; i++) {
System.out.print(array[i] + " ");
}
이 문제에서는 배열을 N+1개로 작성하는 것이 포인트였던 것 같다.
만약 N개로 생성해줬더라면 인덱스 번호가 0부터 시작이므로 한 칸씩 뒤로 이동해야 했을 것..
난 복잡해 꼬이는 거 보단 그냥 N+1로 작성하고 바구니 개수와 인덱스 번호를 맞추는 게 편하당 !! ㅎ ㅎ
최종 코드
import java.util.Scanner;
public class Main {
public static void main(String[] atgs){
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int M = in.nextInt();
int[] array = new int[N+1];
int i = 0; //start
int j = 0; //end
int k = 0; //ball
for(int cnt = 0; cnt < M; cnt++) {
i = in.nextInt();
j = in.nextInt();
k = in.nextInt();
for(int cnt2 = i; cnt2 <= j; cnt2++) {
array[cnt2] = k;
}
}
for(i = 1; i < array.length; i++) {
System.out.print(array[i] + " ");
}
}
}
반응형
'백준 문제 풀이 > 1차원 배열' 카테고리의 다른 글
(#5597 Java) 과제 안 내신 분..? (0) | 2023.08.09 |
---|---|
(#10813 Java) 공 바꾸기 (0) | 2023.08.08 |
(#2562 Java) 최댓값 (0) | 2023.08.03 |
(#10818 Java) 최소, 최대 (0) | 2023.08.03 |
(#10871 Java) X보다 작은 수 (0) | 2023.08.03 |