[BOJ] 백준 1475 방 번호
문제 링크 : https://www.acmicpc.net/problem/1475
0~9까지 숫자가 있습니다. 이 숫자들은 한 봉지 안에 담겨있고, 6과 9는 서로 돌려 쓸 수 있습니다. 이 문제에서 특정 숫자가 주어질때 몇개의 봉지가 쓰이는지 알면됩니다.
우선, 숫자는 1의 자리 숫자들 밖에 없습니다. 따라서 문자열 순회 후 각 숫자들이 몇개 쓰인지 알아내면 됩니다.
그리고, 주의깊게 봐야할 부분은 6과 9 입니다. 서두에 언급 하였듯 두 숫자는 서로 돌려 쓸 수 있습니다. 즉, 9999면 69 69 2세트 봉지가 쓰입니다. 99999면 69 69 9 세봉지가 쓰입니다.
여기서, 6과 9의 합이 짝수면 /2, 홀수면 /2+1 값 만큼 쓰임을 알 수 있습니다.
마지막으로 몇번쓰였는지 저장한 배열을 순회하면서 제일 큰 값을 알아내면 됩니다.
소스코드 :
문제 링크 : https://www.acmicpc.net/problem/1475
0~9까지 숫자가 있습니다. 이 숫자들은 한 봉지 안에 담겨있고, 6과 9는 서로 돌려 쓸 수 있습니다. 이 문제에서 특정 숫자가 주어질때 몇개의 봉지가 쓰이는지 알면됩니다.
우선, 숫자는 1의 자리 숫자들 밖에 없습니다. 따라서 문자열 순회 후 각 숫자들이 몇개 쓰인지 알아내면 됩니다.
그리고, 주의깊게 봐야할 부분은 6과 9 입니다. 서두에 언급 하였듯 두 숫자는 서로 돌려 쓸 수 있습니다. 즉, 9999면 69 69 2세트 봉지가 쓰입니다. 99999면 69 69 9 세봉지가 쓰입니다.
여기서, 6과 9의 합이 짝수면 /2, 홀수면 /2+1 값 만큼 쓰임을 알 수 있습니다.
마지막으로 몇번쓰였는지 저장한 배열을 순회하면서 제일 큰 값을 알아내면 됩니다.
소스코드 :
#include#include using namespace std; int main() { string str; getline(cin, str); int arr[10] = { 0, }; // 배열 돌면서 각 숫자가 몇봉지 쓰였는지 알아냄. for (int i = 0; i < str.length(); i++) arr[str[i] - 48] ++; // 6과 9의 합이 짝수면 /2, 홀수면 /2+1. if ((arr[6] + arr[9]) % 2 == 0) { arr[6] = (arr[6] + arr[9]) / 2; arr[9] = 0; } else { arr[6] = (arr[6] + arr[9]) / 2; arr[9] = 0; arr[6]++; } int big = -1; // 가장 큰 값(몇봉지) 알아냄. for (int i = 0; i < 10; i++) { if (big <= arr[i]) big = arr[i]; } cout << big << endl; }
댓글
댓글 쓰기