알고리즘/백준

[BaekJoon] 백준 10250번_ACM 호텔 forJava

정석이 2021. 9. 6. 17:08

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

내가 푼 방법

 

 

 

손님에게 방을 배정할 때 맨 앞 100~1000의자리 수부터 배정한다.

 

 

1번째 : 101

2번째 : 201

.

.

.

10번째 : 1001

 

여기서 H=10이면 11번째 : 102

 

 

이므로 우선적으로 봐야할 부분은 100~1000의 자리이다.

 

 

1~10의 자리는 N>H일 때 +1씩 늘어나게 되고 N<=H가 되는 순간 N값이 100~1000의 자리 숫자가 된다.

 

 

 

 

 

 

결국 주요 코드는 이렇게 진행된다.

 

 

 

if ( N > H )

      (1~10의자리) + 1;

      N -= H;

else

      N x 100 + (1~10의자리);

 

 

 

 

 if문이 직관적이므로 이걸로 설명을 했지만 이 if문이 반복되어야 하므로 while문을 사용할 것이다.

 

 

 

 

 

 

 

 

 

import java.util.Scanner;

public class Baek10250 { // ACM hotel
	
	public static void main(String[] args) {
		
			
		Scanner scan = new Scanner(System.in);
		
		int T = scan.nextInt();
		
		for(int i=0; i<T; i++) {
			int H = scan.nextInt();
			int W = scan.nextInt();
			int N = scan.nextInt();
			int count = 1;
			
			while(N>H) {
				count += 1;
				N -= H;
			}
			System.out.println(N*100 + count);
				
		}
		scan.close();
	}
}

 

 

 

내가 푼 코드는 이렇게 된다.

 

 

 

 

 

 

 

 

 

 

 

scan을 닫지 않아서 noSuchElement 런타임 에러도 계속 나고... 문제가 많은 문제였다ㅠㅠ

 

 

 

 

 

 


 

 

 

 

 

남의 코드를 살펴보았는데 우선 StringBuffer를 사용하는 것이 효율이 높은 것 같아서

 

 

 

다음 알고리즘부터는 StringBuffer를 적극적으로 활용해야겠다.

 

 

 

 

그리고 반복문으로 빼나가지 말고 그냥 N % H를 해서 나머지를 100~1000의 자리로 하고 몫+1을 1~10의 자리로 하면 더 편한걸 알았다....^^

 

 

내가 푼거랑 일맥상통하는 풀이법인데 너무 직관적으로 문제를 본 것 같아서 아쉽다!