Programming/JAVA

[백준/Java] 여왕벌(10836)

코딩뽀시래기 2024. 5. 20. 23:24
728x90

https://www.acmicpc.net/problem/10836

 

// 백준 - 여왕벌(10836)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;

public class Num10836 {
  public static void main(String[] args) throws IOException {
    BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
    StringTokenizer st = new StringTokenizer(bf.readLine());

    int M = Integer.parseInt(st.nextToken());
    int N = Integer.parseInt(st.nextToken());

    int[] size = new int[M * 2 - 1];

    while(N-- > 0) {
      st = new StringTokenizer(bf.readLine());

      int idx = Integer.parseInt(st.nextToken());

      for(int i = 1; i <= 2; i++) {
        int grow = Integer.parseInt(st.nextToken());

        while (grow-- > 0) {
          size[idx] += i;
          idx++;
        }
      }
    }

    StringBuilder answer = new StringBuilder();
    for(int i = M-1; i >= 0; i--) {
      answer.append(size[i] + 1).append(" ");
      for(int j = M; j <= M*2-2; j++) {
        answer.append(size[j] + 1).append(" ");
      }
      answer.append("\n");
    }

    System.out.print(answer);
  }
}

 

같은 방법으로 Kotlin으로 풀면 서브태스트 4가 통과가 안 됨. Kotlin이 더 느린가?

// 백준 - 여왕벌(10836)
import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.StringTokenizer
import kotlin.math.max

fun main() {
  val br = BufferedReader(InputStreamReader(System.`in`))
  var st = StringTokenizer(br.readLine())

  val M = st.nextToken().toInt()
  var N = st.nextToken().toInt()

  val size = Array(M * 2 - 1, {1})

  while(N-- > 0) {
    st = StringTokenizer(br.readLine())

    // 0은 더해도 의미 없으므로 버리기
    var grow = st.nextToken().toInt() 
    var idx = grow
    
    // 1, 2 누적
    for(j: Int in 1..2) {
      grow = st.nextToken().toInt()
      
      // 왼쪽 열, 위쪽 행 성장 체크
      while(grow-- > 0) {
        size[idx] += j
        idx++
      }
    }
  }

  val answer = StringBuilder()
  for(i: Int in M-1 downTo 0 step(1)) {
    // 제일 왼쪽 열
    answer.append(size[i]).append(" ")
    // 제일 왼쪽 열을 제외하면 자신의 위와 동일한 값
    for(j: Int in M..M*2-2) {
      answer.append(size[j]).append(" ")
    }
    answer.append("\n")
  }

  print(answer)
}
728x90