백준 캔디 구매

KIMYEONGJUN·2025년 6월 29일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫째 줄에 사탕의 가격 C와 상근이가 가지고 있는 지폐의 액면가에 적혀있는 0의 개수 K가 주어진다. (0 ≤ C ≤ 1,000,000,000, 0 ≤ K ≤ 9)

첫째 줄에 상근이가 내야하는 가격을 출력한다.

내가 이 문제를 보고 생각해본 부분

BufferedReader 객체를 생성하여 표준 입력(System.in)으로부터 데이터를 읽는다.
String[] input = br.readLine().split(" ");: 한 줄 전체를 읽어(예: "184 1") 공백(" ")을 기준으로 문자열 배열로 나눈다.
input[0]에는 "184"가, input[1]에는 "1"이 저장된다.
int C = Integer.parseInt(input[0]);: 문자열 "184"를 정수 184로 변환하여 C 변수에 저장한다.
int K = Integer.parseInt(input[1]);: 문자열 "1"을 정수 1로 변환하여 K 변수에 저장한다.
int unit = (int) Math.pow(10, K);: Math.pow(base, exponent) 함수는 base의 exponent 제곱 값을 double 형태로 반환한다.
여기서는 10의 K 제곱을 계산한 후, int 타입으로 형변환하여 unit 변수에 저장합니다. 예를 들어 K=1이면 unit은 10이 된다.
int quotient = C / unit;: 사탕 가격 C를 unit으로 나눈 몫을 계산한다. (정수 나눗셈)
int remainder = C % unit;: 사탕 가격 C를 unit으로 나눈 나머지를 계산한다.
if (remainder * 2 >= unit): 나머지에 2를 곱한 값이 unit보다 크거나 같으면 (즉, 나머지가 unit의 절반 이상이면) 올림을 수행합니다.
result = (quotient + 1) * unit;: 몫에 1을 더한 후 unit을 곱하여 다음 unit 배수를 계산한다.
else: 그렇지 않으면 (나머지가 unit의 절반 미만이면) 내림을 수행한다.
result = quotient * unit;: 현재 몫에 unit을 곱하여 현재 unit 배수를 계산한다.
System.out.println(result);: 계산된 최종 가격 result를 콘솔에 출력한다.
br.close();: 사용이 끝난 BufferedReader를 닫아 자원을 해제한다.

코드로 구현

package baekjoon.baekjoon_29;

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

// 백준 2909번 문제
public class Main1068 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] input = br.readLine().split(" ");

        int C = Integer.parseInt(input[0]); // 사탕 가격
        int K = Integer.parseInt(input[1]); // 지폐 액면가 0의 개수

        // 지폐 액면가 (unit) 계산: 10^K
        // Math.pow는 double을 반환하므로 int로 형변환
        int unit = (int) Math.pow(10, K);

        // 사탕 가격 C를 unit으로 나눈 몫과 나머지 계산
        int quotient = C / unit;
        int remainder = C % unit;

        int result;
        // 반올림 규칙 적용: 나머지가 unit의 절반 이상이면 올림, 아니면 내림
        if(remainder * 2 >= unit) {
            // 올림: 현재 몫의 다음 unit 배수
            result = (quotient + 1) * unit;
        } else {
            // 내림: 현재 몫의 unit 배수
            result = quotient * unit;
        }

        System.out.println(result);
        br.close(); // BufferedReader 닫기
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글