반응형
https://www.acmicpc.net/problem/10813
N개의 수를 M번 반복하여 a,b의 수를 교환하는 문제이다.
우선 첫번째 줄에 N과 M을 입력받는다.
그리고 for문을 작성해서 배열 안에 1~N을 넣고
tmp를 사용해서 a와 b의 순서를 바꾸면 된다.
if(a!=b) {
arr[a] = b;
arr[b] = a;
} else {
arr[a] = a;
arr[b] = b;
}
처음엔 tmp를 몰라서 이렇게 생각했으나 이러면
a=10, b=20일 때 2번줄에서 이미 a=20, b=20이 되어 꼬인다.
그래서 사용해야 하는 것이 tmp 개념이다.
이에 대한 설명은 아래 포스팅을 참고 바란다.
2023.05.16 - [JAVA] - JAVA 두 변수의 값 바꾸기 tmp
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int M = sc.nextInt();
int[] arr = new int[N];
//배열을 만들고,배열 안에 1~N의 수를 차례로 넣는다.
for(int i=0; i<N; i++) {
arr[i] = i+1;
}
for(int i=0; i<M; i++) {
int tmp;
int a = sc.nextInt();
int b = sc.nextInt();
tmp = arr[a-1];
arr[a-1] = arr[b-1];
arr[b-1] = tmp;
}
for(int i=0; i<N; i++) {
System.out.print(arr[i] + " ");
}
}
}
위와 같이 진행을 하면 되는데,
int[] arr = new int[N];
//배열을 만들고,배열 안에 1~N의 수를 차례로 넣는다.
for(int i=0; i<N; i++) {
arr[i] = i+1;
}
정수로 이루어진 arr 배열을 만들고, for문을 활용하여 arr안에 1~N의 수를 넣는다.
for(int i=0; i<M; i++) {
int tmp;
int a = sc.nextInt();
int b = sc.nextInt();
tmp = arr[a-1];
arr[a-1] = arr[b-1];
arr[b-1] = tmp;
}
a, b 두 수를 입력받았을 때 a와 b의 위치를 바꿔야 하니
tmp에 arr[] 배열에 a-1번째 수를 저장하고,
arr[a-1]안에 arr[] 배열에서 b-1번째 수를 저장하고,
arr[b-1]안에 tmp값을 저장하면 결과적으로 arr[a-1]의 값과 arr[b-1]의 값이 서로 바뀐다.
for(int i=0; i<N; i++) {
System.out.print(arr[i] + " ");
}
마지막으로 for문을 사용해 arr[]의 배열을 나란히 출력하면 해결!
반응형
'백준 알고리즘' 카테고리의 다른 글
백준 [5597] 과제 안 내신 분..? - 자바 풀이 (0) | 2023.05.17 |
---|---|
백준 [2675] 문자열 반복 - 자바 풀이 (0) | 2023.05.17 |
백준 [2562] 최댓값 - 자바 (0) | 2023.05.14 |
백준 [10871] X보다 작은 수 - 자바 (0) | 2023.05.11 |
백준 15552번 빠른 A+B 자바 (0) | 2023.05.09 |