공부 일지/문제풀이
바구니 뒤집기
Joshbla
2023. 3. 28. 22:57
문제
https://www.acmicpc.net/problem/10811
10811번: 바구니 뒤집기
도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2
www.acmicpc.net
풀이
Java
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];
for (int i = 0; i <= n; i++) {
arr[i] = i;
}
for (int i = 0; i < m; i++) {
int start = sc.nextInt();
int end = sc.nextInt();
arr = reverse(start, end, arr);
}
for (int i = 1; i <= n; i++) {
System.out.print(arr[i]+" ");
}
}
public static int[] reverse(int start, int end, int[] arr) {
int[] copy = arr.clone();
int len = end - start;
for (int i = 0; i <= len; i++) {
copy[start + i] = arr[end - i];
}
return copy;
}
}
Kotlin
fun main() {
var scanner = Scanner(System.`in`)
var N = scanner.nextInt()
var M = scanner.nextInt()
var arr: Array<Int> = Array(N + 1) { i -> i }
for (i in 0 until M) {
var start = scanner.nextInt()
var end = scanner.nextInt()
arr = reverse(arr, start, end)
}
for (i in 1..N) {
print("${arr[i]} ")
}
}
fun reverse(arr: Array<Int>, start: Int, end: Int): Array<Int> {
var copy = arr.clone()
var len = end - start
for (i in 0..len) {
copy[start + i] = arr[end - i]
}
return copy
}
What's new ?
- 배열을 선언하는 방법이 여러개 있다.
// Int, Long, Char와 같은 기본형일경우
var numbers = IntArray(10)
var name = CharArray(10)
// 그외의 배열
var stringArray: Array<String> = Array(10){"엥"} // "엥"으로 이루어진 10개짜리 배열 생성
var numbers: Array<Int> = Array(5) { i -> i } // 람다식을 이용하여 0부터4까지 채워진 배열 생성
// arrayOf 사용
var numbers = arrayOf(1,2,3) // 자료형은 생략가능
- 자바와 달리 코틀린에는 배열에서도 set, get을 사용할 수 있었다.
(근데 그냥[ ]쓰는게 더편해..)
numbers[0] = 0
numbers.set(1,1) // (인덱스, 값)
var number0 = numbers[0]
var number1 = numbers.get[1]
- for 문을 쓸 때 < .. >을 사용하면 범위가 이상~이하가 된다. java에선 보통 이상~미만으로 작성해왔어서 익숙치 않았다. until을 사용하면 이상~미만으로 설정된다.
for (i in 1..5) {
print("$i ")
}
// 출력: 1 2 3 4 5
for (i in 1 until 5) {
print("$i ")
}
// 출력: 1 2 3 4