알고리즘/acmicpc

[백준][1475번] 방 번호 [cpp, c++]

장그래 2020. 1. 22. 20:22
반응형

백준 1475번 방 번호

  • 간단한 배열 문제이지만, 정답률이 30퍼대로 낮은 문제이다.

  • 숫자가 부족하면 채우는 것이 아닌, 최대 까지 채워진 숫자 세트에서 필요한 만큼 가져다가 쓰면 되는 문제다.

  • https://www.acmicpc.net/problem/1475

  • 풀이방법
    1) 크기(size)가 10 이고 값(value)이 1,000,000인 check 배열을 생성한다. 이유는 N의 최대값이 1,000,000이기 때문이다.
    2) check배열을 생성한 이유는 입력받은 string에 해당하는 숫자를 발견한다면, 해당 check 배열에 index에 접근해 값을 -1 해줄 것이다.
    3) 입력받은 string 값의 해당하는 숫자를 발견한다면, 6인지 9인지 구별한다. 구별한 뒤, 더 값이 큰 쪽에 -1 를 해준다.

  • 함수 설명
    1) 위의 설명이 약간 부족한 거 같아서 보충설명하자면, 필요한 숫자 세트를 채우는 것이 아닌, 사용한 숫자 세트를 빼는 형식으로 알고리즘을 구성했다.

 

1475번: 방 번호

첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수 또는 0이다.

www.acmicpc.net


#include <iostream>
#include <string>
#include <algorithm>
using namespace std;  
string number;  
char num\[10\]{ '0','1','2','3','4','5','6','7','8','9' };  
int check\[10\];  
int main(void){  
int ans = 1;  
for (int i = 0; i < 10; i++) check\[i\] = 1000000;

cin >> number;
for (int i = 0; i < number.length(); i++) {
    for (int j = 0; j < 10; j++) {
        if (number[i] == num[j]) {
            if (num[j] == '6' or num[j] == '9') {
                if (check[6] > check[9]) check[6]--;
                else if (check[6] <= check[9]) check[9]--;
            }
            else  check[j]--;
        }

    }
}
sort(check, check + 10);
cout << 1000000 - check[0];



return 0;


}
반응형