<알고리즘 문제풀이&연습>/[C++] 백준

[백준 1475] 방 번호

사용자 BlockDMask 2017. 8. 1. 16:25
반응형
  • 안녕하세요. BlockDMask 입니다.

  • 이번 포스트는 7월 20일짜 커버입니다.

0. 제목 

  • 백준 1475 방 번호

  • BOJ 1475 방 번호

1. 문제설명


숫자가 1,000,000보다 작은 자연수가 입력이 되면,

그것을 인식하기위한

0~9가지의 열가지 숫자가 있는 플라스틱 숫자 셋트가 몇개가 필요한지.

9는 뒤집어서 6으로 사용 가능하다.


2. 풀이과정


 3가지 방법으로 풀어봤습니다.


T1) 입력을 int 타입의 변수로 받고 배열을 이용하여 계산 한 경우


T2) 입력을 int 타입의 변수로 받고 STL map 컨테이너를 이용하여 계산 한 경우


T3) 입력을 string 타입으로 받고 계산 한 경우


3. 코드


T1) 입력을 int 타입의 변수로 받고 배열을 이용하여 계산 한 경우

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<iostream>
#include<algorithm> 
using namespace std;
 
int main(void){
    int n;
    cin >> n;
            
    int arr[10= {0};
 
    while(true){
        arr[n%10]++;
        if(n/10 == 0break;
        n/=10;    
    }
 
    int num =0;
    for(int i=0; i< 10; i++){
        if(i!=9 && i!=6) num = max(num, arr[i]);
    }
    
    cout << max(num, (arr[6+ arr[9+ 1/2);
    return 0;    
}
cs


T2) 입력을 int 타입의 변수로 받고 STL map 컨테이너를 이용하여 계산 한 경우

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
31
32
33
34
35
36
#include<iostream>
#include<map>
#include<algorithm>
using namespace std;
 
int main(void){
    int n;
    cin >> n;
    
    //map 선언 Key 는 숫자, value는 그 숫자의 갯수.
    map<intint> m;
    map<intint>::iterator iter;    //반복자 선언 
    
    while(1){
 
        if((iter = m.find(n%10)) != m.end()){    //존재하면. 
            iter->second += 1;
        }else{
            m.insert(pair<intint>(n%101));
        }
        
        if(n / 10 == 0break
        
        n /= 10//1의 자리를 없앤다. 
    }
    
    int num =0;
    for(iter = m.begin(); iter != m.end(); iter++){
        if(iter->first != 6 && iter->first != 9)
            num = max(num, iter->second);
    }
    int tmp = (m.find(6)->second + m.find(9)->second + 1/ 2;
        
    cout << max(num, tmp);
    return 0;    
}
cs


T3) 입력을 string 타입으로 받고 계산 한 경우

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<iostream>
#include<string>
#include<algorithm> 
using namespace std;
 
int main(void){
    string str;
    cin >> str;
            
    int arr[10= {0};
 
    for(int i=0; i< str.size(); i++){
        arr[str[i] - '0']++;
    }
 
    int num =0;
    for(int i=0; i< 10; i++){
        if(i!=9 && i!=6) num = max(num, arr[i]);
    }
    
    cout << max(num, (arr[6+ arr[9+ 1/2);
    return 0;    
}
cs


4. 인증


T1) 입력을 int 타입의 변수로 받고 배열을 이용하여 계산 한 경우


T2) 입력을 int 타입의 변수로 받고 STL map 컨테이너를 이용하여 계산 한 경우


T3) 입력을 string 타입으로 받고 계산 한 경우


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

감사합니다.

반응형