반응형
백준 1475번 방 번호
-
간단한 배열 문제이지만, 정답률이 30퍼대로 낮은 문제이다.
-
숫자가 부족하면 채우는 것이 아닌, 최대 까지 채워진 숫자 세트에서 필요한 만큼 가져다가 쓰면 되는 문제다.
-
풀이방법
1) 크기(size)가 10 이고 값(value)이 1,000,000인 check 배열을 생성한다. 이유는 N의 최대값이 1,000,000이기 때문이다.
2) check배열을 생성한 이유는 입력받은 string에 해당하는 숫자를 발견한다면, 해당 check 배열에 index에 접근해 값을 -1 해줄 것이다.
3) 입력받은 string 값의 해당하는 숫자를 발견한다면, 6인지 9인지 구별한다. 구별한 뒤, 더 값이 큰 쪽에 -1 를 해준다. -
함수 설명
1) 위의 설명이 약간 부족한 거 같아서 보충설명하자면, 필요한 숫자 세트를 채우는 것이 아닌, 사용한 숫자 세트를 빼는 형식으로 알고리즘을 구성했다.
#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;
}
반응형
'알고리즘 > acmicpc' 카테고리의 다른 글
[백준][7569번] 토마토[cpp, c++] (0) | 2020.01.29 |
---|---|
[백준][5014번] 스타트링크[cpp, c++] (0) | 2020.01.29 |
[백준][14891번] 톱니바퀴 [cpp, c++] (0) | 2020.01.18 |
[백준][11559번] Puyo Puyo [cpp, c++] (0) | 2020.01.18 |
[백준][11720번] 숫자의 합 [C언어] (0) | 2019.03.28 |