문제
도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2번째 바구니, ..., 가장 오른쪽 바구니를 N번째 바구니라고 부른다.
도현이는 앞으로 M번 바구니의 순서를 역순으로 만들려고 한다. 도현이는 한 번 순서를 역순으로 바꿀 때, 순서를 역순으로 만들 범위를 정하고, 그 범위에 들어있는 바구니의 순서를 역순으로 만든다.
바구니의 순서를 어떻게 바꿀지 주어졌을 때, M번 바구니의 순서를 역순으로 만든 다음, 바구니에 적혀있는 번호를 가장 왼쪽 바구니부터 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 N (1 ≤ N ≤ 100)과 M (1 ≤ M ≤ 100)이 주어진다.
둘째 줄부터 M개의 줄에는 바구니의 순서를 역순으로 만드는 방법이 주어진다. 방법은 i j로 나타내고, 왼쪽으로부터 i번째 바구니부터 j번째 바구니의 순서를 역순으로 만든다는 뜻이다. (1 ≤ i ≤ j ≤ N)
도현이는 입력으로 주어진 순서대로 바구니의 순서를 바꾼다.
출력
모든 순서를 바꾼 다음에, 가장 왼쪽에 있는 바구니부터 바구니에 적혀있는 순서를 공백으로 구분해 출력한다.
제출 답안1 - 오답, 틀린이유
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(); // 바구니 갯수
int M = sc.nextInt(); // 반복횟수
int[] baskets = new int[N+1];
// 바구니 갯수과 바구니에 붙은 번호
for(int f=1; f<=N; f++){
baskets[f] = f;
}
// M번 반복
for(int a=0; a<M; a++) {
int i = sc.nextInt();
int j = sc.nextInt();
for(int z=0; z<j-i; z++){
int temp = baskets[i+z];
baskets[i+z] = baskets[j-z];
baskets[j-z] = temp;
}
}
sc.close();
for(int i=1; i<=N; i++){
System.out.print(baskets[i] + " ");
}
}
}
- 역순으로 만들기위한 for문에서 문제가 생긴 것 같았다.
- 수정된 코드를 받긴했지만 내가 작성한 코드는 왜 안되는지 몰라서 아직까지 정확히 이해가 안된것 같다.
제출답안 : 수정답안, 정답
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(); // 바구니 갯수
int M = sc.nextInt(); // 반복횟수
int[] baskets = new int[N + 1];
// 바구니 갯수과 바구니에 붙은 번호
for (int f = 1; f <= N; f++) {
baskets[f] = f;
}
// M번 반복
for (int a = 0; a < M; a++) {
int i = sc.nextInt();
int j = sc.nextInt();
// i부터 j까지의 바구니 순서를 역순으로 만들기
while (i < j) {
int temp = baskets[i];
baskets[i] = baskets[j];
baskets[j] = temp;
i++;
j--;
}
}
sc.close();
// 결과 출력
for (int f = 1; f <= N; f++) {
System.out.print(baskets[f] + " ");
}
}
}
'문제 풀이 > 알고리즘 풀이' 카테고리의 다른 글
[백준/27866번/JAVA] 문자와 문자열 (0) | 2023.09.04 |
---|---|
[백준/1546번/JAVA] 평균 (0) | 2023.09.01 |
[백준/3052번/JAVA] 나머지 (0) | 2023.09.01 |
[백준/5597번/JAVA] 과제 안 내신 분..? (0) | 2023.08.31 |
[백준/10810번/JAVA] 공 넣기 (0) | 2023.08.31 |