알고리즘

C++ 알고리즘 - 1475 방 번호

마루설아 2025. 1. 19. 23:20

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

 

#include <bits/stdc++.h>
#define endl "\n"

using namespace std;

int main(void) {
	/******** C++ INIT ********/
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	/**************************/


	/******** 변수 선언 ********/
	string str;
	int answer = 1;
	vector<int> set;
	/**************************/


	/******** 구    현 ********/

	// 벡터에 0~9 숫자타일 1개씩 추가
	for (int i = 0; i < 10; i++) {
		set.push_back(1);
	}
	
	cin >> str;

	// 입력받은 각 자리수 별 타일 여유분 체크
	for (int i = 0; i < str.size(); i++) {
		int num = str[i] - '0';

		// 타일 여유분 없을 때
		if (set[num] == 0) {

			// 6일 경우 9가 있는지 체크
			if (num == 6) {
				if (set[9] != 0) {
					set[9]--;
					continue;
				}
			}

			// 9일 경우 6이 있는지 체크
			else if (num == 9) {
				if (set[6] != 0) {
					set[6]--;
					continue;
				}
			}

			// 여유분 없으면 1세트 추가 후 각 타일 1개씩 추가
			answer++;

			for (int i = 0; i < 10; i++) {
				set[i]++;
			}

			// 타일 1개씩 추가 후 사용
			set[num]--;
		}

		// 타일 여유분 있을 때
		else {
			set[num]--;
		}
	}

	cout << answer;
}