반응형
10729. 이진수 표현 D3
문제
정수 N, M 이 주어질 때, M의 이진수 표현의 마지막 N 비트가 모두 1로 켜져 있는지 아닌지를 판별하여 출력하라.
[입력]
첫 번째 줄에 테스트 케이스의 수 TC가 주어진다.
이후 TC개의 테스트 케이스가 새 줄로 구분되어 주어진다.
각 테스트 케이스는 다음과 같이 구성되었다.
첫 번째 줄에 정수 N, M이 주어진다. (1 ≤ N ≤ 30 , 0 ≤ M ≤ 108)
[출력]
각 테스트 케이스마다 한 줄씩
마지막 N개의 비트가 모두 켜져 있다면 ON
아니면 OFF 를 출력하라.
풀이과정
기존에는 스트링으로 풀었지만 이진수 표현이 필요하다는 것이 느껴졌다. 훨씬 쉽고빠르다.
스트링으로 푼것은 1000개의 테스트 케이스 중에서 2개가 맞지 않아서 고민을 해볼 필요가 있을 것 같다.
T = int(input())
for tc in range(1, T+1):
N, M = map(int, input().split())
# m으로 나타내줌
m = M
# 결괏값 초기화
result = ''
# 계속2로 나눠주면서 이진수 변환
while m > 2:
result = str(m%2) + result
m //= 2
# 마지막에는 다음과 같이 변환
if m == 2:
result = '10' + result
else:
result = '1' + result
# 전원이 켜지는 조건을 만들어줌
test = ''
# N자리가 모두 1인 것
for _ in range(N):
test += '1'
# 만약 조건을 통과한다면 ON 아니면 OFF
if result[len(result)-N:len(result)] == test:
power = 'ON'
else:
power = 'OFF'
print("#{} {}".format(tc, power))
T = int(input())
풀이
T = int(input())
# 파워 검사 함수
def power(n):
# 주어진 횟수만큼 돌면서 확인
for i in range(n):
# 1이 아닌 것이 있다면 off
if not M & (1 << i):
return 'OFF'
# 없어서 반복문을 마쳤다면 ON
return'ON'
for tc in range(1, T+1):
N, M = map(int, input().split())
print("#{} {}".format(tc, power(N)))
반응형
'Algorithm' 카테고리의 다른 글
SWEA 5176 이진탐색 (python) (0) | 2021.04.13 |
---|---|
SWEA 5177 이진 힙 (python) (0) | 2021.04.13 |
SWEA 5186 이진수2 (python) (0) | 2021.04.13 |
SWEA 5185 이진수 (python) (0) | 2021.04.13 |
SWEA 1240 단순 2진 암호코드 (python) (0) | 2021.04.13 |