시나브로

8993. 하지 추측 본문

알고리즘/SW Expert Academy

8993. 하지 추측

혬혬 2020. 1. 6. 19:58
728x90

처음에는 이 문제를 while문을 돌리고 맞은 숫자들(box)과 틀린 숫자들(box1)을 set에 저장해서 각 연산마다 box와 box1에 있는 확인하였다. 이렇게 하니깐 31개의 문제 중에 29개만 맞췄다. 

정답 리스트를 보니 프로그램 작동 시작이 너무 짧고 사용하는 저장공간도 너무 작아서 문제를 다시 읽어봤다.

그렇게 먼저 맞는 경우에 대한 모든 경우를 저장하고 비교하는 솔류션을 찾았다.

자료구조 set을 사용한 이유는 set은 이진 트리로 key를 찾는 속도가 다른 구조보다 훨씬 빠르기 때문이다. 또한, 내가 따로 코드 작성을 하지 않고 간단하게 코드 작성이 가능했기 때문이다. 

#include<stdio.h>
#include <set>
#include <algorithm>
int main(void) {
	int test_case = 0;
	scanf("%d", &test_case);
	set<long long> box2; // 맞은애
	for (long long i = 1; i <= 100000000000000; i *= 2) {
		box2.insert(i);
	}
	for (int q = 0; q < test_case; q++) {
		long long number = 0;
		set<long long>::iterator iter;
		long long box1 = 0;
		scanf("%lld", &number);
		box1 = number;
		int signal = 1;
		iter = box2.find(number);
		if (iter != box2.end()) {
			printf("#%d YES\n", q + 1);
		}
		else{
			printf("#%d NO\n", q + 1);
		}
	}

	return 0;
}
728x90

'알고리즘 > SW Expert Academy' 카테고리의 다른 글

8568. 3으로 나눈 순열  (0) 2020.01.07
9088. 다이아몬드  (0) 2020.01.06
[D4] 7465. 창용 마을 무리의 개수  (0) 2019.10.12
[D4] 7810. 승현이의 질문  (0) 2019.10.06
[D4] 8382. 방향 전환  (0) 2019.10.06
Comments