공부 일지/문제풀이

바구니 뒤집기

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