-
[백준/BOJ] 11109번 : 괴짜 교수 (JAVA / 자바)백준 2022. 2. 22. 23:14
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/11109
11109번: 괴짜 교수
첫째 줄에 입력으로 테스트케이스의 개수 T (T ≤ 1000)가 주어진다. 각각의 테스트케이스에 대해 정수 d, n, s, p가 한 칸의 공백을 사이로 주어진다. d (0 ≤ d ≤ 1000000)는 병렬 버전을 개발하는데
www.acmicpc.net
- 문제 -
난이도 브론즈 3 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
(JAVA / 자바) Scanner 와 Bufferedreader
안녕하세요~ 코딩하는 코알못 코메인입니다. 이번엔 백준 문제 풀면서 계속 언급될 scanner와 bufferedreader에 대한 간단한 정리를 해볼거다. 자바에서 입력은 scanner와 bufferedreader가 있다. 우선 각자
comain.tistory.com
풀이 방법
두가지 방법으로 풀 것이다. 테스트 케이스가 1000개까지 가능한데 케이스마다 출력을 하게되면 그만큼 메모리와 시간을 잡아먹게 된다. 하지만 그렇다고 통과 못하는 것은 아니기때문에 두가지 방법을 다 풀어보겠다.
1. 케이스마다 출력
2. StringBuilder를 사용해 저장 후 한번에 출력
한 케이스에 4개의 입력값이 있다.
한 해 직렬의 시간은 (횟수 * 직렬시간)이다.
병렬의 시간은 (횟수 * 병렬시간) + 병렬 개발시간이다.
이 두 값을 비교해서 알맞는 출력값을 출력하면된다.
당연 이것은 효율 좋은 것을 구별해내는 것이기 때문에 시간이 짧은 것이 좋은것다.
직렬 시간이 짧다면 병렬 버전이 필요가 없을 것이고, 병렬이 짧다면 병렬 버전이 필요할 것이다.
코드로 보자.
-풀이-
케이스마다 출력
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int T = Integer.parseInt(br.readLine()); for(int i = 0; i < T; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); int d = Integer.parseInt(st.nextToken()); int n = Integer.parseInt(st.nextToken()); int s = Integer.parseInt(st.nextToken()); int p = Integer.parseInt(st.nextToken()); //병렬시간이 더 오래 걸리면 do not parallelize 출력 //같을경우 does not matter 출력 //직렬시간이 더 오래 걸리면 parallelize 출력 if((n * s) < ((n * p) + d)) System.out.println("do not parallelize"); else if((n * s) == ((n * p) + d)) System.out.println("does not matter"); else System.out.println("parallelize"); } } }
StringBuilder를 사용
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); int T = Integer.parseInt(br.readLine()); for(int i = 0; i < T; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); int d = Integer.parseInt(st.nextToken()); int n = Integer.parseInt(st.nextToken()); int s = Integer.parseInt(st.nextToken()); int p = Integer.parseInt(st.nextToken()); //병렬시간이 더 오래 걸리면 do not parallelize sb에 저장 //같을경우 does not matter sb에 저장 //직렬시간이 더 오래 걸리면 parallelize sb에 저장 if((n * s) < ((n * p) + d)) sb.append("do not parallelize").append("\n"); else if((n * s) == ((n * p) + d)) sb.append("does not matter").append("\n"); else sb.append("parallelize").append("\n"); } System.out.println(sb); } }
-결과-
케이스마다 출력 StringBuilder에 저장해서 한번에 출력
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.
'백준' 카테고리의 다른 글
[백준/BOJ] 11320번 : 삼각 무늬 - 1 (JAVA / 자바) (0) 2022.02.23 [백준/BOJ] 11134번 : 쿠키애호가 (JAVA / 자바) (0) 2022.02.22 [백준/BOJ] 1120번 : 문자열 (JAVA / 자바) (0) 2022.02.22 [백준/BOJ] 1312번 : 소수 (JAVA / 자바) (0) 2022.02.22 [백준/BOJ] 1526번 : 가장 큰 금민수 (JAVA / 자바) (0) 2022.02.22