Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

걸음마부터 달리기

SWEA 1970 쉬운 거스름돈 본문

카테고리 없음

SWEA 1970 쉬운 거스름돈

성추 2025. 4. 10. 20:03

https://swexpertacademy.com/main/solvingProblem/solvingProblem.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

import java.util.*;
import java.io.*;

class Main {
    static int T;
    static int N;

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        T = Integer.parseInt(br.readLine());
        for (int i = 0; i < T; i++) {
            N = Integer.parseInt(br.readLine());
            int[] money = new int[8];
            while(N>0){
                if(N>=50000){
                    int need = N/50000;
                    money[0]=need;
                    N= N-(50000*need);
                }
                else if(N>=10000){
                    int need = N/10000;
                    money[1]=need;
                    N= N-(10000*need);
                }
                else if(N>=5000){
                    int need = N/5000;
                    money[2]=need;
                    N= N-(5000*need);
                }
                else if(N>=1000){
                    int need = N/1000;
                    money[3]=need;
                    N= N-(1000*need);
                }
                else if(N>=500){
                    int need = N/500;
                    money[4]=need;
                    N= N-(500*need);
                }
                else if(N>=100){
                    int need = N/100;
                    money[5]=need;
                    N= N-(100*need);
                }
                else if(N>=50){
                    int need = N/50;
                    money[6]=need;
                    N= N-(50*need);
                }
                else{
                    int need = N/10;
                    money[7]=need;
                    N= N-(10*need);
                }
            }
            System.out.printf("#%d\n",(i+1));
            for(int j=0; j<8; j++ ){
                System.out.print(money[j]+" ");
            }
            System.out.println();
        }
    }
}

솔직히 이게 왜 타임아웃이 나는지 모르겠다.

아래의 최적화된 코드보단 당연히 오래 걸리겠지만 

10 ≤ N ≤ 1,000,000 의 범위 안에서 + 한번의 테스트 케이스에 대해서 3초는 충분히 통과될거같은데...

 

______________________________________________________________________________

라고 생각했었는데 미쳤나보다.

N>0 일때 else문을 보면 need = N/10 이라서 need가 0이 되면서 무한루프에 빠진다.

 

import java.util.*;
import java.io.*;

class Main {
    static int T;
    static int N;

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        T = Integer.parseInt(br.readLine());
        for (int i = 0; i < T; i++) {
            N = Integer.parseInt(br.readLine());
            int[] money = new int[8];
            while(N>=10){
                if(N>=50000){
                    int need = N/50000;
                    money[0]=need;
                    N= N-(50000*need);
                }
                else if(N>=10000){
                    int need = N/10000;
                    money[1]=need;
                    N= N-(10000*need);
                }
                else if(N>=5000){
                    int need = N/5000;
                    money[2]=need;
                    N= N-(5000*need);
                }
                else if(N>=1000){
                    int need = N/1000;
                    money[3]=need;
                    N= N-(1000*need);
                }
                else if(N>=500){
                    int need = N/500;
                    money[4]=need;
                    N= N-(500*need);
                }
                else if(N>=100){
                    int need = N/100;
                    money[5]=need;
                    N= N-(100*need);
                }
                else if(N>=50){
                    int need = N/50;
                    money[6]=need;
                    N= N-(50*need);
                }
                else{
                    int need = N/10;
                    money[7]=need;
                    N= N-(10*need);
                }
            }
            System.out.printf("#%d\n",(i+1));
            for(int j=0; j<8; j++ ){
                System.out.print(money[j]+" ");
            }
            System.out.println();
        }
    }
}

내가 짠 코드

 

 

 

 

이것은 최적화 시킨 코드이다.

import java.util.*;
import java.io.*;

class Main {
    static int T;
    static int N;

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        T = Integer.parseInt(br.readLine());
        for (int i = 0; i < T; i++) {
            System.out.printf("#%d\n",(i+1));
            N = Integer.parseInt(br.readLine());
            int[] money = new int[] {50000 , 10000 , 5000 , 1000 , 500 , 100 , 50, 10};
            for(int j=0; j<8; j++){
                int count =0;
                if((N/money[j])>0){
                    count = N/money[j];
                    N = N - count * money[j];
                }
                System.out.printf("%d ",count);
            }
            System.out.println();
        }
    }
}