- 1~N번의 바구니를 M번만큼 역순을 시행할 건데 M번만큼 바구니의 범위를 받아 역순 진행
- 첫번째 줄은 N/M번을 받고
- 두번째 줄부터는 역순을 진행할 i부터 j까지의 범위를 입력받는다
=> M번의 역순이 끝난 바구니의 일련번호 출력
[제출답안]
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int M = s.nextInt()+1; //바구니 개수
int N = s.nextInt(); //역순
int barray[] = new int[M]; //바구니 배열
int rearray[] = new int[M]; //역순 저장할 배열
//바구니 순번 부여
for(int i = 0; i<M; i++) {
barray[i]=i;
rearray[i]=i;
}
//역순 시행
for(int i=0; i<N; i++) {
int left = s.nextInt(); //범위 시작번호
int right = s.nextInt(); //범위 끝번호
int count = right;
for(int j=left; j<=right; j++) {
rearray[count]=barray[j];
count--;
}
for(int j=0; j<M; j++) {
barray[j] = rearray[j];
}
}
for(int i =1; i<M; i++) {
System.out.println(barray[i]);
}
}
}
[해설]
1. 입력한 수만큼 바구니번호를 저장하는 배열 생성
2. 배열의 인덱스는 0부터이므로 찾는 범위와 숫자를 일치시키기 위해 +1크기의 배열을 생성한다.
예) 5개의 바구니 -> {0,1,2,3,4,5} -> 크기 6
3. 역순을 저장할 배열 rearray도 barray와 동일하게 생성하여 for문을 통해 바구니의 각 인덱스에 순번을 담아준다.
4. N번의 반복을 시행해 역순을 시행할 범위를 받는 for문 작성
5. left에는 범위 시작값을 right에는 범위 마지막 값을 받는다 (문제에서 i와 j)
6. 첫번째 받은 left,right의 역순을 진행할 for문을 안에 작성
6-1) left~right까지 반복하여 역순 배열의 마지막 인덱스에 left값을 담아주며 바뀐 값을 저장
► 2~3범위일 때 (left/right) 2번 반복
j =2부터 시작
rearray[3]=barray[2];
j = 3
rearray[2]=barray[3];
for문 빠져나옴
- right값으로 시작해버리면 한번실행 후 right값이 --되었을 때 범위가 3<=2로 되어 남은 한번을 시행할 수 없어 right값을 따로 count에 저장해서 인덱스로 사용
- for문을 통해 역순이 저장된 배열 rearray값을 barray로 담아 다음 역순 진행시 바뀐 순번에서 진행될 수 있도록 함
- M번의 역순진행이 모두 끝난 후 최종 저장된 barray값을 1번부터 마지막 인덱스까지 출력
* 바구니 번호는 1번부터 시작이라 0번은 출력하지 않음
[이클립스 콘솔창 실행 결과]
[백준 결과]
'Etc > 코딩테스트' 카테고리의 다른 글
[백준] 27866번 - 문자와 문자열 자바 JAVA (CharAt함수 사용) (0) | 2023.09.11 |
---|---|
[백준] 1546번 - 평균 문제풀이 JAVA 자바 for문, 배열 (0) | 2023.09.08 |
[백준] 3052 - 나머지 문제풀이 JAVA 자바 반복문 for, 배열 (0) | 2023.09.07 |
[백준] 2438번 - 별찍기 문제풀이 자바 JAVA for반복문 사용 (0) | 2023.09.04 |
[백준] 15552번 - 빠른 A+B 문제풀이 자바 JAVA - BufferedReader 런타임에러 (0) | 2023.09.03 |