Algorithm

[Java] 백준 2845번 파티가 끝나고 난 뒤

로춘남 2021. 10. 31. 09:42
728x90


입출력 관련 문제, Scanner 말고 Buffer를 이용해보기

첫째줄에 입력되는 값은 사람수 L 과 넓이 P

두번째줄은 각 참가자의 수가 주어진다. 문제에는 5개라고 명시를 해놨네.

그럼 참가자의 수를 a라고 명시를 하고, L*P의 값의 차이를 구하면 되겠군?

왜냐면 상근이가 계산한 참가자의 수(a)와 각 기사에 적혀 있는 참가자의 수의 차이라고 했으니! a - (L x P) 로 보겠다.

 

import java.io.*;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int L = Integer.parseInt(st.nextToken());   //사람수/1m^2
        int P = L * Integer.parseInt(st.nextToken());   //파티가 열렸던 곳 넓이 X 사람수/1m^2
        StringTokenizer st2 = new StringTokenizer(br.readLine());
        while (st2.hasMoreTokens()) {
            int a = Integer.parseInt(st2.nextToken());
            bw.write(String.valueOf(a-P) + " ");
            bw.flush();
        }
        bw.close();
        }
    }

StringTokenizer를 이용했고, while문을 통해 hasMoreToken()을 사용했다.

여기서 호기심이 생겨서 while 대신 for문을 한번 이용해보기로 했음.

 

import java.io.*;
import java.util.StringTokenizer;

public class BJ2845 {
     public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int L = Integer.parseInt(st.nextToken());   //사람수/1m^2
        int P = L * Integer.parseInt(st.nextToken());   //파티가 열렸던 곳 넓이 X 사람수/1m^2
        StringTokenizer st2 = new StringTokenizer(br.readLine());
        
        for(int i = 0; i<5; i++) {
        int a = Integer.parseInt(st2.nextToken());
            System.out.print(a - P + " ");
        }

        bw.close();   
        }
    }

자 그렇다면 hasMoreToken()의 성능이 좋을까? for문의 성능이 좋을까?

hasMoreToken()을 이용했을때

메모리 : 14272KB / 시간 : 124ms

 

for문을 이용했을때

메모리 : 14592KB / 시간 : 148ms

 

hasMoreToken()이 메모리가 더 적고, 시간이 더 빨랐다.

Scanner 대신 Buffer를 요즘 자주 쓰고 있는것처럼, 

for문 대신 hasMoreToken()을 이용해야하는것일까?

효율적인 메모리와 시간에 대해 고민이 많이지는 시점이다.

728x90

'Algorithm' 카테고리의 다른 글

[Java] 백준 3003번 킹, 퀸, 룩, 비숍, 나이트, 폰  (0) 2021.11.02
[Java] 백준 2914번 저작권  (0) 2021.11.01
[Java] 백준 2475번 검증수  (0) 2021.10.30
[Java] 백준 2558번 A+B - 2  (0) 2021.10.30
[Java] 백준 2588번: 곱셈  (0) 2021.10.29