728x90
SMALL
백준 문제 풀이: 10813 [공 바꾸기]
문제 링크: https://www.acmicpc.net/problem/10813
문제 설명:
1번부터 N번까지 번호가 적힌 공이 일렬로 배치되어 있습니다. M번의 공 바꾸기 연산을 수행하며, 각 연산에서 두 위치를 선택해 공을 서로 바꿉니다. 모든 연산이 끝난 후 공의 최종 배치를 출력하는 문제입니다.
문제 해결 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // 입력을 받기 위한 Scanner 객체 생성
int n = scanner.nextInt(); // 공의 개수
int m = scanner.nextInt(); // 바꾸기 연산의 횟수
// 1번부터 N번까지의 공 번호를 배열에 초기화
int[] arr = new int[n + 1];
for (int i = 1; i <= n; i++) {
arr[i] = i;
}
// M번의 연산 수행
for (int i = 0; i < m; i++) {
int a = scanner.nextInt(); // 첫 번째 위치
int b = scanner.nextInt(); // 두 번째 위치
// 두 위치의 공을 교환
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
// 결과 출력
for (int i = 1; i <= n; i++) {
System.out.print(arr[i] + " ");
}
}
}
예제 입력:
5 4
1 2
3 4
1 4
2 2
예제 출력:
4 2 1 3 5
코드 설명
- 핵심 알고리즘: 배열을 사용하여 공 번호를 저장하고, 주어진 위치의 값을 교환하는 작업을 반복합니다.
- 구현 세부사항:
- 초기화 단계에서 배열
arr
를 1번부터 N번까지 채웁니다. - 연산마다 입력받은 두 위치
a
,b
의 값을 교환합니다. - 최종적으로 배열의 1번부터 N번까지 값을 출력합니다.
- 초기화 단계에서 배열
- 시간 복잡도 분석:
- 초기화 단계: O(N)
- 연산 수행: O(M), 각 연산은 상수 시간에 수행
- 결과 출력: O(N)
- 총 시간 복잡도: O(N + M)
결과
코드는 정확히 M번의 공 바꾸기 연산을 수행한 후, 공의 최종 위치를 출력합니다. 배열을 이용한 단순한 구현 문제로, 기본적인 배열 조작 및 교환 연산을 연습하기에 적합합니다. 추가적인 질문이나 개선 사항이 있다면 댓글로 알려주세요!
728x90
LIST
'BAEKJOON > 구현' 카테고리의 다른 글
백준 18808번 [스티커 붙이기](C++) -yes6686- 티스토리 (0) | 2025.01.12 |
---|---|
백준 10811번 [바구니 뒤집기](JAVA) -yes6686- 티스토리 (0) | 2025.01.08 |
백준 1855번 [암호](C++) -yes6686- 티스토리 (0) | 2025.01.07 |
백준 2239번 [스도쿠](C++) -yes6686- 티스토리 (0) | 2025.01.04 |
백준 15686번 [치킨 배달](C++)-yes6686- 티스토리 (0) | 2024.12.30 |