문제/백준

[백준] 31403. A + B - C - JAVA

c-hano 2025. 5. 13. 23:12

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

 

 


조건

 

 

  • 각 줄 마다 A, B, C를 입력받는다. (0보다 큰 양의 정수)
  • 출력의 첫째줄에는 A, B, C를 정수로 취급하여 A + B - C 값을 출력
  • 둘째줄에는 A, B 를 문자열, C를 정수로 취급하여 ("A" + "B") - C 값을 출력 

 

 

풀이

 

 

 

출력의 둘째줄 때문에 헷갈렸다. 검색을 해보니 String타입은 "-"가 안되는 것 이 맞다.

 

문제가 원하는건 A와 B를 문자열로 바꾸어 서로 더하고 다시 정수형으로 바꾸어 ("A" + "B") - C 을 요구하는 것 같다.

 

정수 -> 문자열 -> 정수 를 할 수 있는지 물어보는 문제이다.

 

정수를 문자열로 바꾸는 방법은 세가지 가 있다.

 

  • 1. String d = A + " " // 정수형에 공백("") 을 더하기
  • 2. String d = String.valueOf(A) // String.valueOf() 사용
  • 3. String d = Integer.toString(A) // Integer.toString() 사용

 

2,3 과의 차이는 null 값을 받을때 처리하는 방식 이 다르다.

 

 

2. String.valueOf()

  • Integer num = null;
  • String str = String.valueOf(num); // "null" ← 오류 없이 처리

 

3. Integer.toString()

  • Integer num = null;
  • String str = Integer.toString(num); //  NullPointerException 발생

 

 

따라서 값이 항상 int 타입 이라면 Integer.toString() 을 사용하여도 문제가 없다.

 

하지만 "null" 가능성 이 있다면 String.valueOf() 를 사용하는 편이 낫다.

 

 

 

 

정답

 

 

 

import java.util.*;

public class Main{
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
        
        int a,b,c;
        
        a = sc.nextInt();
        b = sc.nextInt();
        c = sc.nextInt();
        
        String d = "";
        
        d += a;
        d += b;
        
        int e = Integer.parseInt(d);
        
        System.out.println(a + b - c);
        System.out.println(e - c);
    }
}

 

 

 

 

정리

 

 

 

 

정수 -> 문자열

  • 정수 + " "
  • String str = String.valueOf(A) // A가 "null" 가능성이 있을 경우
  • String str = Integer.toString(정수) // A가 int타입이 확실할 경우

 

 

문자열 -> 정수

  • Integer.parseInt()
    • String str = "123"
    • int number = Integer.parseInt(str); // 123
  • Integer.valueOf()
    • String str = "123"
    •  Integer number = Integer.valueOf(Str); // 123값이 int값이 아닌 Integer 객체에 저장 됨.
    • int number2 = number // 기본형인 int를 얻고 싶다면 Integer 객체를 int값으로 변환 해야함 (자동언박싱)