방번호 문제 풀기 2018, May 16 백준에 있는 방번호 풀어보았다. 문제링크 크게 두 가지 방법이 있는거 같다. 먼저 string으로 받아서 쪼개는 방법을 해보았다. void roomNumber() { char roomNumber_[8]; scanf_s("%s",roomNumber_,8); const int length = strlen(roomNumber_); //하나하나 쪼개기 int* roomNumber = new int[length]; for (int i = 0; i < length; i++) { char a = roomNumber_[i]; roomNumber[i] = atoi(&a); printf("%d\n",roomNumber[i]); } int countArray[10] = { 0 }; // 숫자 세기 for (int i = 0; i < 10; i++) { for (int j = 0; j < length; j++) { if (i == roomNumber[j]) countArray[i]++; } } // 6과 9처리 int sixAndNine = countArray[6] + countArray[9]; int sixAndNineNamo = sixAndNine % 2; int sixAndNineMok = sixAndNine / 2; if (sixAndNineNamo != 0) sixAndNine = sixAndNineMok + 1; else sixAndNine = sixAndNineMok; countArray[6] = sixAndNine; countArray[9] = sixAndNine; // 맥스 값 찾기 int max = 0; for(int i=0; i<10; i++) { if(max < countArray[i]) { max = countArray[i]; } } printf("%d", max); delete[] roomNumber; } string을 어떻게 잘 다룰 건지는 더 연구해보아야 할 것 같다. 여기서 더 똑똑한 방법은 나머지를 이용하는 방법이다. 숫자로 입력을 받은 뒤 10으로 나누어가며 슬라이싱을 하면 된다. 나도 질문게시판을 통해 알았다. 소스코드 공유해주신 분 감사합니다~! void roomNumberUsingNamo() { int cntArray[10] = { 0 }; int roomNumber = 0; scanf_s("%d",&roomNumber); int mok = roomNumber / 10; int namo = roomNumber % 10; while (mok != 0 || namo != 0) { cntArray[namo]++; namo = mok % 10; mok = mok / 10; } // 6과 9 처리 int sixAndNine = cntArray[6] + cntArray[9]; int sixAndNineNamo = sixAndNine % 2; int sixAndNineMok = sixAndNine / 2; if (sixAndNineNamo != 0) sixAndNine = sixAndNineMok + 1; else sixAndNine = sixAndNineMok; cntArray[6] = sixAndNine; cntArray[9] = sixAndNine; // max 찾기 int max = 1; for (int i = 0; i < 10; i++) { if (max < cntArray[i]) max = cntArray[i]; } printf("%d", max); } Please enable JavaScript to view the comments powered by Disqus.