본문 바로가기
Programming/Algorithm

백준 방번호

by OKOK 2018. 1. 26.

/*

방 번호 9999 를 받아서 어떻게 처리해야하지? 

1,2,3,4,5,6,7,8,9 원래 자리수가 몇개인지 파악을 해야합니다. 예를들어서 9999 를받으면

0 0 0 0 0 0 0 0 4 입니다만,


9를 돌려서 6으로 사용할 수 있기 때문에 2셋트만 필요로 합니다.

그럼 받은 것을 오케이 10으로 나눠서 무엇이 들어있는지 살펴보도록 합니다. 방은

엔이므로,

그럼 예를들어서 자릿수는 중요하지 않으니, 10으로 나눈 것을 살펴보도록 하겠습니다.

1234 % 10 = 4

1234 / 10 = 123


123 % 10 = 3

123 / 10 = 12


12 % 10 = 2

12 / 10 = 1


1 % 10 = 1

1 / 10 = 0

여기서 조건을 넣어서 0 이상일때만 돌리도록 합니다. 오케이. 

if(n>0){}


9와6을 제외한 값들에서 맥스값을 구하고 9 와 6은 따로 구해서 맥스값을 구하면 됩니다.


9 와 6 의 값은 더해서 2 -> 1 이고, 3 -> 

더한 값이 0 1 2 3 4 5 6 이라면

         0 1 1 2 2 3 3 이니 규칙이 2로 나눠서 

2로 나눈값에 나머지가 있으면 +1 을 하면 됩니다. 나머지가 없으면 그대로 사용.

몫과 나머지를 모두 사용하도록 합니다. 오케이요. 일찍 오니까 일이 잘 되는 것 같습니다.


*/


#include <iostream>


using namespace std;


int N;

int number[10] = { 0 };

int index = 0;

int ans = 0;

int N_copy = 0;


void problemIn() {

cin >> N;

N_copy = N;


while (N > 0) {

index = N % 10; number[index]++;

N = N / 10;

}

}


void solve() {

int maxVal = 0;

int max_sn = 0;

int sum_sn = 0;


for (int i = 0; i < 10; i++) {

if (!(i==6) && !(i==9)) {

if (maxVal < number[i]) {

maxVal = number[i];

}

}

}


sum_sn = number[6] + number[9];

max_sn = sum_sn / 2 + (sum_sn % 2 > 0 ? 1 : 0);


if (maxVal < max_sn) {

maxVal = max_sn;

}


if (N_copy == 0) {

cout << 1 << endl;

}

else {

cout << maxVal << endl;

}

}


int main() {

problemIn();

solve();

return 0;


숫자에 대해서 개별적으로 접근하는 방법은 10으로 나누고 나머지를 이용하는 것입니다. 오케이요. 문자에 대해서 접근하는 방법은 string 을 사용하는 것입니다. 오케이요. 예외처리하는 것에 대해서도 생각을 하고 있어야 하며, 생각이 났을 때 어디한곳에 기록해두면 좋습니다. 주석처리를 하면 안볼 가능성이 높으니,