나 개발자 진짜 되냐?

바킹독 0x03 문제3 - 방 번호 / 백준 1475번 본문

C++을 시작해봐요!/알고리즘을 공부해봐요!

바킹독 0x03 문제3 - 방 번호 / 백준 1475번

Snow Rabbit 2025. 9. 23. 18:41

오늘은 윈도우11로 업데이트했다!

업데이트까지.. 3시간이나 걸렸는데..

설정까지 한 거 포함하면 4시간..ㅋㅋ

하지만 뭔가 되게 업데이트해서 기분이 좋다!

업그레이드된 거 같고 ㅎㅋㅋㅋ

 

그 기분 좋은 마음으로

오늘도 문제 하나 풀기 시작한다.

 

사실 주말에 문제 풀면서

좋은 위로를 받았다..

문제에 대한 해결책을 먼저 알아야지만

접근이 가능해서

어떻게 할지 생각하는 게 좋다는 것

 

코드를 뭐 쓸지 생각하지 말고

어떻게 풀 수 있을지 생각한 다음에 코드를 뭐 쓸지 생각해 보자.

못하는 건 아니라는 말이었지만

지금 내 실력으로는

머리를 싸매도 못 푸는 문제들이 있어서

그 부분은 답을 보며 외우고 눈에 익히는 방법이라고 했다.

 

해보자.


 

 

역시 문제를 푸는 거보다 문제를 이해하는데 더 오래 걸렸다.

 

그니까..

숫자의 개수가 두 개면 두 세트가 필요한데

6이랑 9는 한번 더 쓸 수 있으니 두 개어도 한 개면 되는 거고

3개면.. 두 세트가 필요하고.. 4개.. 여도 두 세트 

 

오케이..

 

숫자를 일단 입력받았을 때 

0부터 9까지 담을 칸을 만들고 담고

가장 많이 든걸 답으로 하면 될 거 같다.

 

단 6이랑 9는 따로 빼서 따로 계산을 해야 하는데...

 

먼저 푼 답은 이랬다.

너무 열심히 풀어서 한 번에 다 맞으면 어쩌지? 했는데 

ㅋㅋ

지 선생에게 힌트를 요청했다.

 

힌트 1

입력값이 1000000이라고 해서..

( 심지어 이전에 const를 안 써서 심각한 오류발생했었다 ㅋㅋㅋ )

이렇게 했는데

입력이 부족하거나 멈추면 오작동한다고 알려주었다.

그렇다면 문자열로 바꿔야겠다고 생각

 

힌트 2

 num [c]++ 이건 c가 0부터 9까지인 게 보장되어야 이렇게 쓸 수 있다고 한다.

하지만 room의 경우 문자열이기 때문에

이것을 숫자로 바꿔주어야 한다.

그래서 - '0'으로 해줘야 한다.

  

힌트  3

num [6] || num [9]

으로 하면 i가 도는 거와 상관없이 스킵되는 문제가 생긴다고 한다.

그럼 어떻게 해야 할까??!

 i == 6 || i == 9으로 해야 한다!

 

힌트 4

특수한 케이스는 6인 9는.. 뒤집어쓸 수 있지만

/2를 하게 되면 문제가 발생할 수 있다고 한다.

 

하긴 3개도 2개 필요한데 나누기로 하면 몫이 1이라서 안되는구나

그럼 +1을 해줘야겠네

나누기 전에!

 

그렇게 4가지를 고쳤더니?! 답이 됐다!!!

히히

힌트 보고 한 거니까 괜찮겠지?! 흐흐 히히 호호

 

답은 조금 달랐다

#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  
  int N, a[10] = {}, ans = 0;
  cin >> N;
  
  // 자리수 추출
  while(N){
    a[N%10]++;
    N /= 10;
  }

  for(int i = 0; i < 10; i++){
    if(i == 6 || i == 9) continue;
    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;
}

 

먼저 그냥 숫자로 받아서

자릿수를 하나씩 나누었고

그 값을 a에 넣어주는 방향

그것은 N을 % 10 해서 나머지를 구하고 그 나머지를 ++ 해주는 방식

다음에 N /= 10 해줘서 다음 루프 돌게 하기.

 

그리고 이제 보니 굳이 내 식에서 if로 또 선별할 필요도 없었나 보다..

애초에 6이랑 9일 때... 가 

그런 기준도 없고

answer69에 6이랑 9를 넣는 다했으니 괜찮은 듯하다.

 

풀었으니 오케이.