loading

알고리즘/알고리즘JAVA

[백준알고리즘/JAVA/while문] 10952번 문제 : A+B-5

침착곰 2021. 4. 24. 16:20
반응형

안녕하세요

백준알고리즘 단계별로 풀어보기 4단계 10952번 문제 A + B - 5를 풀어봤습니다

while문을 응용해서 푸는 문제입니다

제가 보통 개발을 하면 while보다는 for문과 if문을 선호해서 while문을 오랜만에 쓰려니 머리가 잘 안 돌아가더라고요 ㅠ

약간 헤매면서 풀었습니다 ㅠ

이 문제를 풀고 다른 분들이 푼 방법을 보니 정말 다양한 방식으로 풀었더군요 ㅎ

제가 푼 두 가지 방법과 다른 분이 풀은 한 가지 방법에 대해서 설명해보겠습니다

www.acmicpc.net/problem/10952

 

10952번: A+B - 5

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

문제

두 정수 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

 

로그인

 

www.acmicpc.net

 

 제일 깔끔하게 짠 소스 같습니다

 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

반응형
그리드형