[BAEKJOON] 백준 3460: 이진수 (C#)
2024. 5. 12. 17:17ㆍIT/BaekJoon
문제 링크
https://www.acmicpc.net/problem/3460
문제
양의 정수 n이 주어졌을 때, 이를 이진수로 나타냈을 때 1의 위치를 모두 찾는 프로그램을 작성하시오. 최하위 비트(least significant bit, lsb)의 위치는 0이다.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, n이 주어진다. (1 ≤ T ≤ 10, 1 ≤ n ≤ 106)
출력
각 테스트 케이스에 대해서, 1의 위치를 공백으로 구분해서 줄 하나에 출력한다. 위치가 낮은 것부터 출력한다.
통과한 답안
using System.Text;
namespace _3460
{
internal class Program
{
static void Main(string[] args)
{
int T = int.Parse(Console.ReadLine());
for (int i = 0; i < T; i++)
{
int n = int.Parse(Console.ReadLine());
string binary = Convert.ToString(n, 2);
StringBuilder sb = new StringBuilder();
for (int j = 0; j < binary.Length; j++)
{
if (binary[binary.Length - 1 - j] == '1')
{
sb.Append(j + " ");
}
}
Console.WriteLine(sb.ToString().Trim());
}
}
}
}
10진수의 숫자를 2진수로 변경하는 방법은
C#의 Convert.ToString(n(변경하려는 숫자), 2(변경하려는 진수))을 사용해서 변경하면 된다.
이 문제에서의 포인트라고 할 수 있는 부분은
1의 위치를 출력하는 과정에서 인덱스를 이용하는 것이 아닌
1의 자리, 10의 자리, 100의 자리 순으로 인덱스의 역순을 사용한다는 것이다.
이를 해결하기 위해 방법을 고민하다 아래와 같은 방법으로 해결하였다.
binary[binary.Length - 1 - j] == '1'
숫자의 길이에서 인덱스를 빼면 역순으로 인덱스를 지정할 수 있으므로
이 방법을 사용해서 인덱스 순서가 아닌 자리수의 순서로 답을 구할 수 있었다.
'IT > BaekJoon' 카테고리의 다른 글
[BAEKJOON] 백준 1515: 수 이어 쓰기 (C#) (0) | 2024.05.17 |
---|---|
[BAEKJOON] 백준 4690: 완전 세제곱 (C#) (0) | 2024.05.15 |
[BAEKJOON] 백준 3053: 택시 기하학 (C#) (0) | 2024.05.11 |
[BAEKJOON] 백준 1919: 애너그램 만들기 (C#) (0) | 2024.05.11 |
[BAEKJOON] 백준 1773: 폭죽쇼 (C#) (0) | 2024.05.10 |