[BAEKJOON] 백준 15917: 노솔브 방지문제야!! (C#)
2024. 6. 30. 01:29ㆍIT/BaekJoon
문제 링크
https://www.acmicpc.net/problem/15917
문제
여러분은 Q개의 쿼리를 수행해야 합니다. 수행해야 하는 쿼리는 다음과 같습니다.
어떤 수 a를 2의 거듭제곱 꼴로 나타낼 수 있는가?
입력
첫 줄에 Q가 주어집니다. (1 ≤ Q ≤ 106)
두 번째 줄부터 Q+1번째 줄까지 a가 주어집니다. a는 1이상 231-1이하 자연수입니다.
출력
각 쿼리마다, 답이 Yes이면 1을, 그렇지 않으면 0을 출력합니다.
통과한 답안
using System.Text;
namespace _15917
{
internal class Program
{
static void Main(string[] args)
{
int Q = int.Parse(Console.ReadLine());
StringBuilder sb = new StringBuilder();
string[] arr = new string[32];
MakeArr(arr);
for (int i = 0; i < Q; i++)
{
string a = Console.ReadLine();
if (arr.Contains(a))
{
sb.AppendLine("1");
}
else
{
sb.AppendLine("0");
}
}
Console.WriteLine(sb.ToString());
}
static string[] MakeArr(string[] arr)
{
for (int i = 0; i < arr.Length ; i++)
{
arr[i] = Math.Pow(2, i).ToString();
}
return arr;
}
}
}
다양한 방법으로 해결할 수 있는 문제로 힌트에서는 비트로 해결하는 방법을 제시했지만,
힌트를 보지 않고 문제를 풀어서 비트 연산을 적용하지는 못했다.
문제를 해결한 방법은 주어진 범위(2의 31제곱)까지의 2의 제곱들을 배열로 저장한 후에
입력되는 값이 해당 배열에 존재하는지 확인하는 방법으로 해결하였다.
이 방법은 주어지는 수를 2의 제곱인지 확인하는 대신,
2의 제곱수들을 가지고 주어진 수와 비교하는 것으로 연산 속도를 빠르게 만들었다.
'IT > BaekJoon' 카테고리의 다른 글
[BAEKJOON] 백준 6504: 킬로미터를 마일로 (C#) (1) | 2024.06.30 |
---|---|
[BAEKJOON] 백준 10474: 분수좋아해? (C#) (0) | 2024.06.30 |
[BAEKJOON] 백준 15818: 오버플로우와 모듈러 (C#) (0) | 2024.06.30 |
[BAEKJOON] 백준 4436: 엘프의 검 (C#) (0) | 2024.06.26 |
[BAEKJOON] 백준 10178: 할로윈의 사탕 (C#) (0) | 2024.06.25 |