묠니르묘묘
꾸준히 성장하는 개발자스토리
묠니르묘묘
전체 방문자
오늘
어제
  • 분류 전체보기 (188)
    • 프로그래밍 (48)
      • 디자인패턴 (4)
      • 예외,에러 (4)
      • Java (29)
      • Kotlin (3)
      • React.js (4)
      • JavaScript (2)
      • Apache Kafka (2)
    • Spring (49)
      • Spring (21)
      • Spring Cloud (3)
      • JPA (25)
    • 코딩테스트 (31)
      • 알고리즘 (5)
      • Java - 백준 (26)
      • Java - 프로그래머스 (0)
    • AWS (7)
    • 데이터베이스 (6)
    • 개발 etc (23)
    • 도서 (5)
    • 회고록 (4)
    • 데브코스-데이터엔지니어링 (15)

인기 글

최근 글

hELLO · Designed By 정상우.
묠니르묘묘

꾸준히 성장하는 개발자스토리

[백준] 10952번 - Java(자바)
코딩테스트/Java - 백준

[백준] 10952번 - Java(자바)

2022. 1. 9. 19:48

백준 10952번 - Java

https://www.acmicpc.net/problem/10952

 

10952번: A+B - 5

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

www.acmicpc.net

https://www.acmicpc.net/problem/10952

 

알고리즘

한 줄에 2개의 입력이 들어온다.

2개의 입력이 0이 아니면

2개의 정수를 더하여 출력한다.

2개의 입력이 0이면 끝난다.

 

1. 0보다 크고 10보다 작은 정수 A와 B를 입력받는다.

2. A와 B가 0이 아닐 때

  2-1. (A+B)를 한 줄 출력한다.

3. 0이 맞다면 종료

 

풀이1

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class No_10952 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st;
        while(true) {
            st = new StringTokenizer(br.readLine());
            int A = Integer.parseInt(st.nextToken());
            int B = Integer.parseInt(st.nextToken());
            if (A==0 && B==0) break;
            sb.append(A+B).append('\n');
        }
        System.out.println(sb);
    }
}

기본적인 입출력인 Scanner -> BufferedReader , print -> StringBuilder 로 쓴 것이다.

위 알고리즘대로 풀어서 썼을 때

1. while 문으로 계속 입력을 받는다.

2. A 와 B 를 입력 받는다.

3. if문으로 A 와 B 가 0인지 확인하여 0이면 break로 while 문 중단하고 끝낸다.

4. 0이 아니라면 StringBuilder에 (A+B)를 추가하고, 곧 바로 '\n'을 넣는데 이것은 Enter라고 보면 된다.

5. 모든 작업이 끝나면 StringBuilder를 출력하고 문제 종료

 

풀이2

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class No_10952 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        while (true) {
            String str = br.readLine();
            int A = str.charAt(0) - 48;
            int B = str.charAt(2) - 48;
            if (A == 0 && B == 0) break;
            sb.append(A + B).append('\n');
        }
        System.out.println(sb);
    }
}

풀이1 방법밖에 생각이 나지않아 다른 풀이법들을 참고하였는데 색다른 방법이라 적어놓는다.

풀이1과 다른점은 A와 B를 입력하는 방식이다.

풀이2는 입력받는 값이 한 자리의 숫자이고, 위치가 고정적이라는 점을 생각하여 StringTokenizer를 쓰지 않는다.

일단 한 줄의 문자열을 받은 후 거기서 0번째 문자를 int A에 넣을 것인데 이 상태는 인코딩한 값 상태여서 - 48이나 - '0'을 해주어야 한다. 48과 '0' 은 똑같은 의미이다. 왜 이러한 방식을 하는지 모르겠다면 스트림, char(문자)와 String(문자열)을 공부하여야 한다.

 

일단 str이라는 문자열에서 1개의 char(문자)를 가져오는데 사용자마다 IDE 환경이 달라서 거기서 설정되어 있는 인코딩 형식의 10진수 값이 나온다고 보면 된다. 그런데 이 다양한 인코딩 형식들 대부분은 1 ~ 127번 문자까지는 아스키 코드값과 같아서 대부분의 사용자가 모르는 경우가 많다.

그래서 아스키코드에서 우리가 아는 숫자 0의 값은 48이기에 현재 저 문자에서 - 48 또는 - '0' 을 한것이다. 그렇게 했을 시 우리가 원하는 숫자가 나오게 된다.

저작자표시 (새창열림)

'코딩테스트 > Java - 백준' 카테고리의 다른 글

[백준] 2577번 - Java(자바)  (0) 2022.01.23
[백준] 2562번 - Java(자바)  (0) 2022.01.18
[백준] 10818번 - Java(자바)  (0) 2022.01.14
[백준] 1110번 - Java(자바)  (0) 2022.01.11
[백준] 2439번 - Java(자바)  (0) 2022.01.04
    '코딩테스트/Java - 백준' 카테고리의 다른 글
    • [백준] 2562번 - Java(자바)
    • [백준] 10818번 - Java(자바)
    • [백준] 1110번 - Java(자바)
    • [백준] 2439번 - Java(자바)
    묠니르묘묘
    묠니르묘묘

    티스토리툴바