본문 바로가기
공부

BOJ 1475 해결과 고찰

by 뜨응 2022. 1. 7.
#include<iostream>

using namespace std;

string a;
int n, s;
int arr[10];

int main() {
	
	cin >> a;

	for (int i = 0; i < a.size(); i++) {
	  arr[a[i] - '0'] += 1;
	}

	for (int i = 0; i < 10; i++) {

		if (n < arr[i]) {
			n = arr[i];
			if (i == 6 || i ==9) {
				if((arr[6] + arr[9]) % 2 == 0)
					n = (arr[6] + arr[9]) / 2;
				else 
					n = (arr[6] + arr[9]) / 2 + 1;
			}
		}
	}
	cout << n;
	}
충격적이게도 이거 푸는 데만 5시간 가량을 쏟은 것 같다. 
물론 근로를 하느라 계속 집중하지는 못했지만 그래도 너무 오래걸렸다.
오늘은 전 날 했던 알파벳 개수 구한 것을 이용해 숫자를 하나 하나 치지 않았다.
하지만 세트의 개수를 구하는게 나에겐 너무 어려웠다.
123456789가 나왔을 때 이것을 어떻게 세트 한 개로 쳐야할지 감이 잘 오지 않았다.
가장 많이 나온 값이 세트의 개수가 아니냐는 말을 듣고 바로 풀어보았다.(어떻게 이런 생각을 할 수 있는지 부러웠다.)
그리고 6이랑 9는 같은 것으로 생각해도 되지 않나요? 하는 말을 듣고 그렇게 해보았다.  
string a;
int n, s;
int arr[9];

int main() {
	
	cin >> a;

	for (int i = 0; i < a.size(); i++) {
      if(a[i] == 9){
        arr[6] += 1;
      }
	  arr[a[i] - '0'] += 1;
	}

이런 식으로 해서 풀었는데 9를 전혀 배열에 넣지못했다. 이유를 아직 찾지 못했다. 이유가 뭘까??

 

고찰

  1. 항상 나는 긴 문장을 받거나 숫자를 받고 나중에 하나 하나 쪼개서 저장해야하면 배열을 먼저 생각하게 된다. 하지만 string으로 받는 편이 나누기 편한 것 같다. (나중에 아닌 것이 나올지도 모르지만 현재는 그렇다.)
  2. 나는 아스키 코드로 풀었지만 받은 string을 10으로 나눠 그 나머지를 배열에 저장해서 풀 수도 있을 것이다.
  3. 6과 9를 어떻게 처리해야 하는지, 6과 9가 아닌 한 번씩 나온 숫자들을 어떻게 set하나로 처리할 지를 너무 오래 고민했다. 6과 9는 같은 숫자로, 모든 숫자들 중 가장 많이 나온 숫자가 set의 개수라는걸 영영 못 깨달았을 것 같다. 2시간 이상 고민하지 말아야겠다.
  4. 66666을 쳤는데 2가 나왔다. 나머지가 생기는 경우를 고려하지 않아서 그렇다. 이 부분은 나머지가 생기는 것과 생기지 않는 것으로 구분하여 해결하였다.

쉬운 문제인 것 같았는데 너무 오래 고민했다.

안타깝다.

'공부' 카테고리의 다른 글

BOJ 11004 해결, 시간 초과  (0) 2022.01.13
BOJ 9012 해결과 고찰.....(최악)  (0) 2022.01.12
BOJ 11365 3가지 풀이와 고찰  (0) 2022.01.10
BOJ 10808  (0) 2022.01.06
BOJ 1181, 10828 문제 해결과 고찰  (0) 2022.01.06