혜랑's STORY

[BOJ_C++] 5671번 : 호텔 방 번호 본문

무지성 공부방/알고리즘 해결

[BOJ_C++] 5671번 : 호텔 방 번호

hyerang0125 2021. 8. 16. 11:31

code

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <cstring>
#include <stack>
#include <vector>
#include <cmath>
#include <string>

using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int n, m, cnt;
    string num;
    bool flag;

    while (scanf("%d %d",&n,&m) == 2) {
        cnt = 0;
        for (int i = n; i <= m; i++) {
            num = to_string(i);
            flag = true;        
            for (int j = 0; j < num.length(); j++) {
                for (int k = j + 1; k < num.length(); k++) {
                    if (num[j] == num[k]) {
                        flag = false;
                        break;
                    }
                }
                if (!flag) break;
            }
            if (flag) cnt++;
        }
        cout << cnt << "\n";
    }
    return 0;
}

 

  • n부터 m까지 string으로 변환하여 같은 수가 있는지 검사한다.
    • 같은 수가 있으면 flag를 false로 바꾸고 반복문을 탈출한다.
  • for문이 정상적으로 끝났다면 반복되는 숫자가 없다는 것으로 cnt를 증가시킨다.
  • cnt를 출력하고 다음 입력을 받다. (EOF가 입력될 때까지 실행해야 한다.)
    • 처음에 !cin.eof()일 때까지 실행했는데 마지막 cnt 값이 중복되어 출력되었다. 인터넷을 찾아보니 다른 방법으로 scanf()가 EOF가 아닐때까지 입력받으면 된다하여 바꾸었더니 통과할 수 있었다. 나는 scanf() 반환값을 이용함.

결과