안녕하세요
백준알고리즘 단계별로 풀어보기 4단계 10952번 문제 A + B - 5를 풀어봤습니다
while문을 응용해서 푸는 문제입니다
제가 보통 개발을 하면 while보다는 for문과 if문을 선호해서 while문을 오랜만에 쓰려니 머리가 잘 안 돌아가더라고요 ㅠ
약간 헤매면서 풀었습니다 ㅠ
이 문제를 풀고 다른 분들이 푼 방법을 보니 정말 다양한 방식으로 풀었더군요 ㅎ
제가 푼 두 가지 방법과 다른 분이 풀은 한 가지 방법에 대해서 설명해보겠습니다
문제
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력
입력은 여러 개의 테스트 케이스로 이루어져 있다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)
입력의 마지막에는 0 두 개가 들어온다.
출력
각 테스트 케이스마다 A+B를 출력한다.
문제 풀이
1. 첫 번째 방법입니다
보시면 알겠지만 정답만 맞추자는 심정으로 다듬지 않고 제출한 것이라 약간 허접해보입니다(그래도 속도는 다른 분이 푼 것과 똑같이 나오더군요 ㄷㄷ;;)
while문에서 true와 break를 사용해서 빠져나오는 것을 생각하지 않고 단순히 while문쪽에 조건을 걸어서 while문을 빠져나오는 것만 생각한 채로 풀었습니다
약간 허접해보이는 코드가 나왔습니다
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 선언
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// StringBuilder 선언
StringBuilder sb = new StringBuilder();
// while문을 타기 위한 변수 선언
int a = 1;
int b = 1;
// a, b가 0이 아니면 계속 while문을 실행
while(a != 0 && b != 0)
{
// StringTokenizer 변수 선언 " "(스페이스)로 구분짓는다
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
// 합계값을 넣을 변수 선언
int sum;
// a, b에 변수를 집어넣고 두 개의 합을 계산한다
a = Integer.parseInt(st.nextToken());
b = Integer.parseInt(st.nextToken());
sum = a + b;
// a, b가 0이 아니면 Sb에 합계를 넣는다
if(a != 0 && b != 0)
sb.append(Integer.toString(sum) + "\n");
}
// 결과 출력
System.out.print(sb);
}
}
2. 다듬은 두 번째 방법입니다
while - break를 사용해서 결과를 구합니다
소스는 첫 번째 방법보다 더 깔끔하지만 속도는 안 나오네요 ㅠ
어째서 다듬은건데 속도가 더 안나와!!!
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 선언
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// StringBuilder 선언
StringBuilder sb = new StringBuilder();
// while문 선언
while(true)
{
// StringTokenizer 변수 선언 " "(스페이스)로 구분짓는다
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
// a, b 변수 선언 및 데이터 입력
int a;
int b;
a = Integer.parseInt(st.nextToken());
b = Integer.parseInt(st.nextToken());
// a, b가 0인 경우 break -> while문을 빠져나온다
if(a == 0 && b == 0)
break;
// sb에 데이터 입력
sb.append((a+b) + "\n");
}
// 결과 출력
System.out.print(sb);
}
}
3. 마지막 세 번째 방법입니다
다른 코드를 참고해서 짠 소스입니다
www.acmicpc.net/source/27097825
제일 깔끔하게 짠 소스 같습니다
String을 readLine을 해서 while문이 시작할 때마다 다음 라인의 데이터를 받아줍니다
int A와 B는 charAt으로 0-9까지의 데이터를 가져오는데 char code에서는 0-9까지가 48-57 까지를 의미합니다
str.charAt에서 - 48을 해줍니다
이렇게 값을 받아서 결과를 출력합니다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main3 {
public static void main(String args[]) throws IOException {
// BufferedReader 및 StringBuild 선언
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
// while문 실행
while(true){
// string 변수를 BufferedReader입력 값의 다음Line으로 받는다
String str = br.readLine();
// 첫 번째 문자코드를 받는다 0-9까지 문자코드는 48-57이다
// -> 그래서 - 48을 해준다
int A = str.charAt(0) - 48;
int B = str.charAt(2) - 48;
// A와 B가 0인 경우 break
if(A==0 && B == 0){
break;
}
// StringBuilder에 데이터 추가
sb.append((A+B)).append("\n");
}
// 결과 출력
System.out.println(sb);
}
}
여기까지 백준알고리즘 10952번 문제 A+B - 5를 풀은 내용이었습니다
알고리즘을 푸는데 제 글이 참고가 되셨으면 좋겠습니다!
다음 문제 : 2021.04.25 - [알고리즘/알고리즘JAVA] - [백준알고리즘/JAVA/while문] 10951번 문제 : A+B-4
'알고리즘 > 알고리즘JAVA' 카테고리의 다른 글
[백준알고리즘/JAVA/while문] 1110번 문제 : 더하기 사이클 (0) | 2021.04.30 |
---|---|
[백준알고리즘/JAVA/while문] 10951번 문제 : A+B-4 (0) | 2021.04.25 |
[백준알고리즘/JAVA/for문] 10871번 문제 : X보다 작은 수 (5) | 2021.04.23 |
[백준알고리즘/JAVA] error: class 클래스명 is public, should be declared in a file named 자바명.java (3) | 2021.04.23 |
[백준알고리즘/JAVA/for문] 2439번 문제 : 별 찍기 - 2 (0) | 2021.04.22 |