문제
https://www.acmicpc.net/problem/10811
배열에서 주어진 구간을 뒤집는(역순으로 바꾸는) 작업을 여러 번 수행하는 문제였다.
문제 풀이
1. Scanner
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//Scanner 객체를 생성하여 입력을 받기 위한 준비
Scanner scanner = new Scanner(System.in);
//배열의 크기 N과 뒤집을 구간의 수 M을 입력받음
int N = scanner.nextInt();
int M = scanner.nextInt();
//크기가 N인 정수형 배열을 생성
int[] array = new int[N];
//배열에 1부터 N까지의 숫자를 순서대로 저장
for (int i = 1; i <= N; i++) {
array[i - 1] = i;
}
//M번의 구간 뒤집기 작업을 수행
for (int k = 0; k < M; k++) {
// 구간의 시작 인덱스 i와 끝 인덱스 j를 입력받음
int i = scanner.nextInt();
int j = scanner.nextInt();
//구간 [i, j]를 뒤집기 위해 중간까지 반복
for (int p = 0; p < (j - i + 1) / 2; p++) {
//현재 위치의 값을 임시 변수에 저장
int temp = array[i - 1 + p];
//대칭 위치의 값을 현재 위치에 저장
array[i - 1 + p] = array[j - 1 - p];
//임시 변수에 저장된 값을 대칭 위치에 저장
array[j - 1 - p] = temp;
}
}
// 최종 배열의 내용을 출력
for(int i = 0; i < array.length; i++){
System.out.print(array[i] + " ");
}
//Scanner 객체를 닫아 리소스를 해제
scanner.close();
}
}
2. BufferedReader
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
//BufferedReader를 사용하여 입력을 받기 위한 준비
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
//첫 번째 줄에서 N과 M을 입력받음
String[] firstLine = reader.readLine().split(" ");
int N = Integer.parseInt(firstLine[0]);
int M = Integer.parseInt(firstLine[1]);
//1부터 N까지의 숫자를 가진 배열 생성
int[] array = new int[N];
for (int i = 1; i <= N; i++) {
array[i - 1] = i; //배열에 값 할당
}
//M번의 반전 작업 수행
for (int k = 0; k < M; k++) {
//각 반전 작업에 대한 입력을 받음
String[] line = reader.readLine().split(" ");
int i = Integer.parseInt(line[0]); //반전 시작 인덱스
int j = Integer.parseInt(line[1]); //반전 종료 인덱스
//i부터 j까지의 구간을 반전
for (int p = 0; p < (j - i + 1) / 2; p++) {
//반전할 두 요소를 교환
int temp = array[i - 1 + p]; //시작 인덱스의 요소
array[i - 1 + p] = array[j - 1 - p]; //종료 인덱스의 요소
array[j - 1 - p] = temp; //교환
}
}
//최종 배열 출력
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " "); //배열의 각 요소를 출력
}
}
}
'코딩테스트 > 백준' 카테고리의 다른 글
[백준/JAVA]27866번 문자와 문자열 (0) | 2025.01.13 |
---|---|
[백준/JAVA]1546번 평균 (0) | 2025.01.13 |
[백준/JAVA]3052번 나머지 (0) | 2025.01.10 |
[백준/JAVA]5597번 과제 안 내신 분..? (0) | 2025.01.10 |
[백준/JAVA]10818번 최소, 최대 (0) | 2025.01.09 |