![[백준] 11021 - A+B -7](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKLfT8%2FbtsyMK3sKZH%2F52SWoq4cWpst8MmrekP8mK%2Fimg.png)
• 문제
테스트 케이스만큼 A,B의 값을 입력받아 A+B의 값을 출력하는 프로그램이다.
• 풀이
A+B는 앞에서 2~3번은 풀어본듯하다 물론 각 문제마다 다른 조건이 있었지만 조금은 다르게 풀어보기 위해 이번 A+B문제는
Scanner와 println을 사용하지않고, BufferedReader와 BufferedWriter를 사용하여 입출력을 구현해보겠다.
반복문의 조건식 먼저 생각해보자,
for(i=0; i<T; i++)
위 코드와 같이 i를 0으로 초기화하면 출력할 때 Case #0: N의 형식으로 출력되기때문에
i는 1로 초기화 해주고 조건식을 i가 T보다 작으면이 아니라 i가 T와 같거나 작으면으로 초기화 해주자.
for(i=1; i<=T; i++)
입력 값을 받을 때 A와 B를 공백으로 구분하여 받아야하는데 필자는 StringTokenizer를 사용하여 A와 B를 구분하도록하겠다.
StringTokenizer st; // StringTokenizer타입의 st변수 생성 *이 때, import되어있어야 사용가능
st = new StringTokenizer(br.readLine(), " ");
//객체를 생성해주는데 입력값은 br.readLine()으로 받고, 구분자는 " "(공백)이다.
//위 코드를 한줄로 간략하게 하면
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
구분자로 A와 B를 구분해줬으면 이제 출력을 위해 bw Buffer에 출력할 값 즉, Case #i: A+B를 넣어준다.
bw.write("Case #" + i + ": " + (Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken())) + "\n");
위와 같이 쓰면 정답처리도 받을 수 있고 코드도 짧게 써서 좋을 수 있겠지만 가독성이 너무 떨어진다고 생각된다.
때로는 짧은 코드에 너무 집착하지 않고 효율적이며, 가독성 높은 코드를 짤 수 있어야한다.
가독성을 높이기위해 입력을 변수 A,B에 받아주고 버퍼에 데이터를 A+B로 읽기편하게 넣어주도록 하겠다.
위의 코드와 아래코드는 같은 코드이지만 가독성은 아래가 훨씬 높다.
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
bw.write("Case #" + i +": " + (A+B) + "\n");
전체 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine());
for(int i=1; i<=T; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
bw.write("Case #" + i +": " + (A+B) + "\n");
}
br.close();
bw.flush();
bw.close();
}
}
한 가지 주의할 점이 있는데 버퍼에 A+B의 값을 넣을 때 만약 괄호없이 A+B를 넣는다면,
A와 B가 각각 문자열로 바뀌게되어 그냥 AB로 출력될 것이다.
이번에는 System.out.print와 Scanner를 이용하여 문제를 풀어 속도차이를 비교해보겠다.
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for(int i=1; i<=T; i++) {
int A = sc.nextInt();
int B = sc.nextInt();
System.out.println("Case #" + i + ": " + (A+B));
}
}
}
위에가 Scanner와 println()을 사용한 코드이고
아래가 BufferedWriter와 BufferedReader를 사용한 코드이다.
확실히 코드의 길이는 짧아지지만 속도차이에서는 거의 두 배 가까이 차이나는 것을 확인할 수 있다.
•마무리
잘못된 정보가 있거나 피드백할 부분이 있다면 댓글로 부담없이 남겨주세요 !!!
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 2438 - 별 찍기 -1 (1) | 2023.10.19 |
---|---|
[백준] 11022 - A + B -8 (1) | 2023.10.18 |
[백준] 15552 - 빠른 A+B (0) | 2023.10.18 |
[백준] 25314 - 코딩은 체육과목 입니다 (0) | 2023.10.18 |
[백준] 25304 - 영수증 (0) | 2023.10.17 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!