C++

[백준 알고리즘] 5671번 : 호텔 방 번호, c++

2022. 3. 20. 12:48

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

 

5671번: 호텔 방 번호

선영이는 집 호수에 반복되는 숫자가 있는 경우에는 그 집에 사는 사람에게 불운이 찾아온다고 믿는다. 따라서, 선영이는 838호나 1004호와 같이 한 숫자가 두 번 이상 들어있는 집에는 절대 살지

www.acmicpc.net

c++로 백준 5671번 문제를 풀어보겠다.

 

 

 

 

 

문제

선영이는 집 호수에 반복되는 숫자가 있는 경우에는 그 집에 사는 사람에게 불운이 찾아온다고 믿는다. 따라서, 선영이는 838호나 1004호와 같이 한 숫자가 두 번 이상 들어있는 집에는 절대 살지 않을 것이다.

2050년, 선영이는 한국에서 가장 돈이 많은 사람이 되었다. 그녀는 해변가에 새로운 호텔을 하나 지으려고 한다. 하지만, 투숙객에게 불운이 찾아오는 것을 피하기 위해서 반복되는 숫자가 없게 방 번호를 만들려고 한다.

정부는 선영이의 호텔 방 번호는 N보다 크거나 같고, M보다 작거나 같아야 한다는 조건을 걸고 신축 허가를 내주었다. 선영이의 새 호텔에는 방이 최대 몇 개 있을 수 있을까? (두 방이 같은 방 번호를 사용할 수 없다)

입력

입력은 여러 개의 테스트 케이스로 이루어져 있고, 한 줄이다. 각 줄에는 문제의 설명에 나와있는 N과 M이 주어진다. (1 ≤ N ≤ M ≤ 5000)

출력

각각의 테스트 케이스에 대해서 N보다 크거나 같고, M보다 작거나 같은 수 중에서 반복되는 숫자가 없는 것의 개수를 출력한다.

예제 입력 1 복사

87 104
989 1022
22 25
1234 1234

예제 출력 1 복사

14
0
3
1

 

 

 

 

<문제 풀이>

 

처음 작성한 코드는 다음과 같다.

 

 

다른 c++ 컴파일러에서는 잘 돌아갔지만, 백준 사이트에서는 '틀렸습니다' 라고 떴다.

while 반복문을 종료할 조건이 문제에 명확히 나와있지 않아 내가 추측하는 대로 했는데, 종료 조건이 문제가 원하는 것과 같지 않아서 라고 생각했다.

 

생각 끝에 while문 조건부분에 "cin >> N >> M" 을 넣어 입력 값이 있을 때까지 반복하도록 만들었더니, 잘 돌아가는 것을 확인 할 수 있었다.

 

 

 

1. while 반복문의 조건에 "cin >> N >> M" 을 넣어 입력 값이 있을 때까지 반복하도록 한다.

 

- while 반복문 코드 내용 -

for문을 N부터 M까지 반복한다.

     (입력받은 숫자를 string형으로 바꿔준 후, 숫자 안에서 겹치는 숫자가 있는 지 확인한다.)

     (겹치는 숫자가 없다면 count값을 하나 증가시킨다.)

계산한 count값을 출력한다.

다시 while문을 반복한다.

 

 

 

코드는 다음과 같다.