본문 바로가기
개발/백준 & 프로그래머스

[백준]1475번 방 번호 c/c++

by 성장하고픈개발자 2022. 8. 1.
728x90
728x90

문제

 

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

 

1475번: 방 번호

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

www.acmicpc.net

 

코드

 

#include<iostream>
#include<algorithm>
using namespace std;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    // N=0 일때는 max 값은 1이므로 ans를 1로 둔다.
    int N, a[10] = {}, ans = 1;
    cin >> N;

    // 자리수 추출
    while (N) { //정수 0을 제외한 값은 모두 1(true)의 값을 갖는다.
        a[N % 10]++;
        N /= 10;
    }

    for (int i = 0; i < 10; i++) {
        if (i == 6 || i == 9) continue;  //일단 6, 9박스일 경우를 제외했을때 최댓값
        ans = max(ans, a[i]);
    }
    // (a[6]+a[9])/2를 올림한 값이 6, 9에 대한 필요한 세트의 수이므로 (a[6]+a[9]+1)/2을 계산
    ans = max(ans, (a[6] + a[9] + 1) / 2);
    cout << ans;
}

 

설명

 

한 세트에 0,1,2,3,4,5,6,7,8,9 가 들어있는것..

예를 들어 1226696 이란 방 번호가 있으면 6696은 두세트로 해결 할 수 있으므로 두세트만 있으면 된다.

 

일단 6,9가 몇번 사용되었는지를 제외하고 for문을 돌리고 배열에 저장되어있는 값들 중 최댓값을 구한다!!

그리고 나중에 (a[6] + a[9] +1 )/2 가 6,9 사용했을때 필요한 세트 수 이므로 만약에  (a[6] + a[9] +1 )/2 값이 이전에 for문 돌리면서 구했던 최댓값보다 크다면  (a[6] + a[9] +1 )/2 값을 최댓값으로 정한다!

 

만약에 번호가 66669이면 3세트가 필요하다 (6,6)(6,6)(9) 이렇게 3세트 필요한것이다

코드로 다시 설명하자면...

a[6] =4, a[9] =1 이므로 (4+1)/2 =2.xxx 의 올림한 값, 즉 3세트가 필요하다!!

 

이 결과를 도출해내는게 정말 쉽지 않은것같다...

 

728x90
728x90