백준 1475번 문제
별것아닌것같은데 헤매서 힘든문제였다
방번호를 0~9까지의 숫자 세트를 이용해서 만드는 문제로
6과 9는 각각 뒤집어서 사용할 수 있다
9999의 경우 숫자세트 4개가 필요한게 아니라, 9와 6 1세트, 9와 6 1세트 해서 총 2가 출력되면 된다
#include<bits/stdc++.h>
using namespace std;
int main() {
string str;
cin >> str;
int arr[10]={0};
int tmp;
for(int i=0; i<str.size();i++){
tmp = str[i]-'0';
if(tmp ==9) {
arr[6]++;
}
else{
arr[tmp]++;
}
}
int max = 1;
if(arr[6] % 2==0){
arr[6] = ceil(arr[6]/2);
}else{
arr[6] = ceil(arr[6]/2)+1;
}
for(int i=0; i<9; i++){
if(max < arr[i]){
max = arr[i];
}
}
cout << max;
return 0;
}
숫자를 입력받으면 10으로 나눠주는걸 반복해야되니까
문자열로 받은 다음 하나 하나 쪼개서 숫자로 바꿔 배열에 삽입해주었다
그리고, 0부터 9까지의 int형 배열을 만들고 입력받은 숫자에 해당하는 배열 인덱스를 증가시켜줬다
그렇게 마지막에는 배열내의 가장 큰 값을 출력해주면 완성
+ 6과 9의 값은 하나로 합쳐서 관리하는게 편해서 배열을 0부터8까지만 들어가게끔 만들었다
따라서 arr[6]의 값은 반으로 나누는 과정이 필요하다
+ 근데 소수점자리를 올려주는 ceil 함수는 그리 호락호락하지않았다
(정수로 반환 해주지않아서 2.5가 계속 2로 나오는 바람에 arr[6]의 값을 홀수 짝수 나눠서 계산했다)
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
9999의 경우 배열 예시
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
0 | 0 | 0 | 0 | 0 | 0 | 4 | 0 | 0 |
입력한 숫자에 해당하는 인덱스의 값을 모두 올려주고 난 다음에는
arr[6]의 값을 반으로 나누어주고
arr 배열에서 가장 큰 값을 출력해주도록 했다
문자를 정수로 변환하는법 참고 (char to int)
출처 : https://www.acmicpc.net/problem/1475
https://stackoverflow.com/questions/1253670/why-do-round-and-ceil-not-return-an-integer
'문제풀기' 카테고리의 다른 글
[MySQL] 프로그래머스 SQL 고득점 kit level1, SELECT 문 (0) | 2021.11.03 |
---|---|
[프로그래머스] 77484 로또의 최고 순위와 최저 순위, C++ 풀이 (0) | 2021.10.03 |
[백준/BOJ] 배열 1919번 문제, 애너그램 만들기 C++ 풀이 (0) | 2021.08.08 |
비쥬얼 스튜디오 설치 없는 온라인 컴파일러 사이트 추천, ideone (0) | 2021.08.06 |
[백준/BOJ] 배열 10807번 문제, 개수 세기 C++ 풀이 (0) | 2021.07.28 |
[백준/BOJ] 21312번 문제, 홀짝 칵테일 C++ 풀이 (0) | 2021.03.28 |