Algo

[BOJ-2566]백준 알고리즘 2566 [Kotlin][Java]

onemask 2019. 4. 28. 20:36

Kotlin에 조금 더 익숙해지고자 BOJ를 코틀린으로 풀고 있다. 

 

문제 링크 : https://www.acmicpc.net/problem/2566

 

2566번: 최댓값

첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.

www.acmicpc.net


  • 문제

BOJ 2566 최대값. 


 

  • [Java] 
import java.util.Scanner;

public class Baek_2566_java {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int max = 0;

        int[][] array = new int[9][9];
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                array[i][j] = sc.nextInt();
                max = Math.max(max, array[i][j]);
            }
        }
        System.out.println(max);
        
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                if (array[i][j] == max) {
                    System.out.println((i + 1) + " " + (j + 1));
                }
            }
        }

    }
}



  • [Kotlin]

import java.util.Scanner

fun main(args: Array<String>) {
    val sc = Scanner(System.`in`)
    val array = Array(9) { IntArray(9) }

    var max = 0
    var row =0
    var colum = 0
    
    for (i in array.indices) {
        for (j in 0 until array[i].size) {
            array[i][j] = sc.nextInt()
            if (array[i][j]>max){
                max = array[i][j]
                row =i
                colum = j
            }
        }
    }

    println(max)
    println("${row+1} ${colum+1}")
}

 

솔직히 Java로 짠것도 썩 맘에 들지 않는다. 

다만 코틀린으로 쉽게 코드가 떠오르지 않을 때

JAVA로 풀어서 Kotlin으로 변환하는 방법을 종종 취한다. 

 

Java에서는 For문 2번으로 max값과 최댓값의 column, row 값을 알 수 있었으나 

이후 코드를 좀 더 줄이고자 Kotlin에서는 다른 방법으로 코드를 작성해 보았다. 

 

내가 작성한 Kotlin 코드도 변수가 많아서 맘에 들지 않지만, 

일단 코드를 풀어보자면 

 

> Java

 int [][] array = new int[9][9]

 for (int j = 0; j < array[i].length; j++) {
             //j는 0~8까지. 
 }

 

> Kotlin

  val array = Array(9){IntArray(9)}  
  
  for (j in 0 until array[i].size) {
          //j는 0~8 까지 
  }

둘 다 같은 의미다. 

 

사실 Kotlin에서 2D 배열을 선언하는 방법이 저것 말고 다른 것도 있을 것 같은데 

이후 좀 찾아봐야겠다. 

 

Kotlin에서는 until 은 열린 기호라고 보면 된다. 

array [i]. size는 9이기 때문에 j는 9를 포함하지 않는다. 

 

음 좀더 코틀린(?) 스럽게 문제를 풀고자 노력해야겠다. 

 

 

LIST