문제
https://www.acmicpc.net/problem/10811
10811번: 바구니 뒤집기
도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2
www.acmicpc.net
바구니의 개수 N, 시행횟수 M을 입력받은 뒤 정수 a,b를 입력받아서 b ~ a번째 바구니의 값을 바꾸는 문제이다.
입력 출력
5 4 3 4 1 2 5
1 2
3 4
1 4
2 2
5 4 5개의 바구니{1,2,3,4,5}, 4번 시행
1 2 > {2,1,3,4,5}
3 4 > {2,1,4,3,5}
1 4 > {3,4,1,2,5}
2 2 > {3,4,1,2,5}
------------------------------------------------------------------------------------------------------------------
풀이
{1, 2, 3, 4, 5, 6, 7, 8}인 바구니의 순서를 변경할 때
입력 값이 (1 8)이라고 예시를 들면
[a] [b]
1번째 배열 - 8번째 배열
2번째 배열 - 7번째 배열
3번째 배열 - 6번째 배열
4번째 배열 - 5번째 배열
a와 b는 서로의 값을 교환하며, a는 1 증가하고 b는 1 감소한다.
b가 a보다 값이 큰 경우만 값을 교환하므로 while문의 조건을 a<b로 설정하였다.
(1) Scanner 사용
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // n개의 바구니
int count = sc.nextInt(); // 시행 횟수
int temp=0;
int busket[] = new int[n];
for(int i=0;i<busket.length;i++) {
busket[i] = i+1;
}
for(int i=0;i<count;i++) {
int a = sc.nextInt()-1; //1 > 0번째 배열
int b = sc.nextInt()-1; //5 > 4번째 배열
while(a<b) {
temp = busket[a];
busket[a] = busket[b];
busket[b] = temp;
a++;
b--;
}
}
sc.close();
for(int i=0;i<busket.length;i++) {
System.out.print(busket[i]+" ");
}
}
}
------------------------------------------------------------------------------------------------------------------
(2) BufferdReader 사용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main2 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer strtk = new StringTokenizer(br.readLine()," ");
int n = Integer.parseInt(strtk.nextToken());
int count = Integer.parseInt(strtk.nextToken());
int temp = 0;
int busket[] = new int[n];
for(int i=0;i<busket.length;i++) {
busket[i] = i+1;
}
for(int i=0;i<count;i++) {
strtk = new StringTokenizer(br.readLine()," ");
int a = Integer.parseInt(strtk.nextToken())-1;
int b = Integer.parseInt(strtk.nextToken())-1;
while(a<b) {
temp = busket[a];
busket[a] = busket[b];
busket[b] = temp;
a++;
b--;
}
}
br.close();
for(int i=0;i<busket.length;i++) {
System.out.print(busket[i]+" ");
}
}
}
Scanner
BufferedReader
'문제 풀이' 카테고리의 다른 글
[백준] 27866번: 문자와 문자열 - JAVA (자바) (0) | 2023.05.27 |
---|---|
[백준] 1546번: 평균 - JAVA (자바) (0) | 2023.05.23 |
[백준] 3052번: 나머지 - JAVA (자바) (0) | 2023.05.12 |
[백준] 10810번: 공 넣기 - JAVA (자바) (0) | 2023.05.09 |
[백준] 10813번: 공 바꾸기 - JAVA (자바) (0) | 2023.05.06 |