| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- 백준코테
- 유니티공부
- c#
- 바킹독알고리즘
- C++
- 유니티
- 유니티서바이벌게임만들기
- 오블완
- unity3dservival
- 유니티게임만들기
- 바킹독
- Unity
- 백준 구현문제
- 백준 c++ 공부
- c#코딩기초트레이닝
- c#기초문법
- 티스토리챌린지
- c++ solved.ac
- c#코테
- unity게임만들기
- 리그오브레전드턴제게임
- 백준 C++
- unity3d게임만들기
- 백준코딩테스트
- c++ 백준
- unity게임
- 백준
- solved class 2
- C#문법
- c#기본문법
- Today
- Total
나 개발자 진짜 되냐?
바킹독 0x03 문제3 - 방 번호 / 백준 1475번 본문

오늘은 윈도우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를 넣는 다했으니 괜찮은 듯하다.
풀었으니 오케이.
'C++을 시작해봐요! > 알고리즘을 공부해봐요!' 카테고리의 다른 글
| 바킹독 0x03 문제5 - 개수 세기 / 백준 10807번 (0) | 2025.09.24 |
|---|---|
| 바킹독 0x03 문제4 - 두 수의 합 / 백준 3273번 (0) | 2025.09.24 |
| 바킹독 0x03 문제2 - 숫자의 개수 / 백준 2577번 (0) | 2025.09.17 |
| 바킹독 0x03 문제1 - 알파벳 개수 / 백준 10808번 (2) | 2025.09.16 |
| 바킹독 0x02 문제27 - 최댓값 / 백준 2562번 (0) | 2025.09.15 |