반응형

백준 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

 

1475번: 방 번호

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

www.acmicpc.net

 

https://stackoverflow.com/questions/1253670/why-do-round-and-ceil-not-return-an-integer

 

Why do round() and ceil() not return an integer?

Once in a while, I find myself rounding some numbers, and I always have to cast the result to an integer: int rounded = (int) floor(value); Why do all rounding functions (ceil(), floor()) return a

stackoverflow.com

 

 

반응형

+ Recent posts