문제/백준
[백준] 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값으로 변환 해야함 (자동언박싱)