[BaekJoon] 5596번 - 시험 점수 (java)
1. 문제
👉 문제 바로가기
- 조건
시간 제한 | 메모리 제한 |
---|---|
1초 | 128MB |
- 문제
대한고등학교에 재학 중인 민국이와 만세는 4과목(정보, 수학, 과학, 영어)에 대한 시험을 봤다. 민국이와 만세가 본 4과목의 점수를 입력하면, 민국이의 총점 S와 만세의 총점 T 중에서 큰 점수를 출력하는 프로그램을 작성하시오. 단, 서로 동점일 때는 민국이의 총점 S를 출력한다.
- 입력
입력은 2줄로 이루어져 있다.
1번째 줄에는 순서대로 민국이의 정보, 수학, 과학, 영어 점수(정수형)가 있으며, 공백으로 구분되어 있다.
2번째 줄에는 1번째 줄과 마찬가지로 순서대로 만세의 정보, 수학, 과학, 영어 점수(정수형)가 있고, 공백으로 구분되어 있다.
- 출력
문제에서 요구하는 정답을 출력한다.
- 예제
입력 | 출력 |
---|---|
100 80 70 60 80 70 80 90 |
320 |
100 80 70 60 80 70 60 100 |
310 |
2. 풀이
반복문 for
를 사용해 4과목의 점수를 입력받아 총 합을 구한다.
조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문 작성;
}
2개의 입력방식을 사용해서 결과를 출력한다.
- Scanner 클래스
- BufferedReader 클래스
① StringTokenizer 클래스
② split() 메서드
2-1. Scanner 클래스
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int S = 0, T = 0;
for(int i=0;i<4;i++) S += sc.nextInt();
for(int i=0;i<4;i++) T += sc.nextInt();
System.out.println(Math.max(S,T));
}
}
위와같이 객체를 생성할 때, Scanner(System.in) 에서
System.in
은 입력한 값을Byte 단위
로 읽는 것을 뜻한다.
int형 데이터를 입력받기 위해
nextInt()
메서드를 사용한다.
Math.max()
는 전달받은 2개의 인자 중큰값을 반환
하는 함수이다.
[여기서 잠깐!]
2-2. BufferedReader 클래스 사용
BufferedReader는 readLine()
메서드를 사용해 한 행을 전부 읽는다.
이를 공백단위로 분리해야 하는데, 두가지 분리 방법으로 문제를 풀어보자.
① StringTokenizer 클래스를 사용하여 분리해주는 방법
② split() 을 사용하는 방법
① StringTokenizer 클래스를 이용
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int S = 0, T = 0;
while(st.hasMoreTokens()){
S += Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
while(st.hasMoreTokens()){
T += Integer.parseInt(st.nextToken());
}
System.out.println(Math.max(S,T));
}
}
readLine()
은 한 줄을 통째로 읽어 String으로 반환하기 때문에, StringTokenizer 클래스의nextToken()
를 이용해 공백으로 구분된 입력값들을 순서대로 가져온다.
hasMoreTokens()
은 StringTokenizer에 사용할 수 있는 토큰이 더 있는지 확인하는 함수이다.
true를 반환하는 경우는 토큰이 존재하고, false를 반환하는 경우 토큰이 없다는 의미이다.
Integer.parseInt()
을 사용해 String형을int형으로 변환
시켜준다.
[여기서 잠깐!]
BufferedReader 클래스
에 대해 더 알아보고 싶으면 여기를 클릭하면 된다.② split() 을 사용
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main{
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] arrS = br.readLine().split(" ");
String[] arrT = br.readLine().split(" ");
int S = 0,T = 0;
for(int i=0;i<4;i++){
S += Integer.parseInt(arrS[i]);
T += Integer.parseInt(arrT[i]);
}
System.out.println(Math.max(S,T));
}
}
readLine()
을 통해 한 줄로 받은 String 데이터를split(" ")
메서드를 사용해 공백 단위로 나눈 뒤 배열에 저장한다.
3. 성능 비교
위에서 부터 순서대로
BufferedReader + StringTokenizer
BufferedReader + split()
Scanner
입력의 경우 확실히 Scanner 보다는 BufferedReader 가 빠른 것을 볼 수 있다.
관련 페이지
Leave a comment