나를 기록하다
article thumbnail
반응형

8진수 2진수

시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초256 MB40357135351121335.763%

문제

8진수가 주어졌을 때, 2진수로 변환하는 프로그램을 작성하시오.

입력

첫째 줄에 8진수가 주어진다. 주어지는 수의 길이는 333,334을 넘지 않는다.

출력

첫째 줄에 주어진 수를 2진수로 변환하여 출력한다. 수가 0인 경우를 제외하고는 반드시 1로 시작해야 한다.

예제 입력 1

314

예제 출력 1

11001100

풀이

1) 파이썬 내장함수 사용

print(bin(int(input(), 8))[2:])

2) 시간 초과

eight = ["000","001","010","011","100","101","110","111"]
s = input()
start = True
ans = ''
if s == '0':
    ans = '0'
for ch in s:
    n = ord(ch)-ord('0')
    if start and n < 4:
        if n == 0:
            continue
        elif n == 1:
            ans += '1'
        elif n == 2:
            ans += '10'
        elif n == 3:
            ans += '11'
        start = False
    else:
        ans += eight[n]
        start = False
print(ans)
  1. eight: 8진수를 2진수로 변환할 때 사용하는 미리 정의된 문자열 리스트입니다. 인덱스가 8진수를 나타내고, 값이 해당 8진수를 3자리 이진수로 변환한 값입니다.
  1. s = input(): 사용자로부터 8진수를 입력받아 변수 s에 저장합니다.
  1. start = True: 첫 번째 숫자 여부를 나타내는 플래그 변수입니다. 변환하는 도중 첫 번째 숫자를 처리할 때는 앞의 불필요한 0을 제거해야 하므로 이 변수를 사용합니다.
  1. ans = '': 변환된 2진수를 저장하는 빈 문자열입니다.
  1. if s == '0': 입력받은 8진수가 '0'이라면, 그대로 2진수 '0'으로 출력하고 종료합니다.
  1. for ch in s: 입력받은 8진수의 각 문자(숫자)에 대해 반복문을 실행합니다.
  1. n = ord(ch) - ord('0'): 현재 8진수 문자를 정수로 변환합니다.
    • ord() 함수

      ord() 함수는 파이썬 내장 함수로, 주어진 문자를 해당하는 유니코드 코드 포인트(정수)로 변환해줍니다. 간단히 말해, 문자를 그에 해당하는 숫자 값으로 변환하는 함수입니다.

      예를 들어, 다음과 같이 사용할 수 있습니다:

      print(ord('A'))  # 출력: 65
      print(ord('Z'))  # 출력: 90
      print(ord('a'))  # 출력: 97
      print(ord('z'))  # 출력: 122
      print(ord('0'))  # 출력: 48
      print(ord('9'))  # 출력: 57

      문자열에서 각 문자의 정수 값을 얻기 위해 ord() 함수를 사용할 수 있으며, 이를 통해 문자열에서 특정 숫자 또는 문자를 조작하거나 비교하는 데 활용할 수 있습니다.

      이전에 제공한 코드에서 n = ord(ch) - ord('0') 부분은 현재 8진수 문자를 해당하는 정수 값으로 변환하는 데 사용되었습니다. 예를 들어 '2' 문자의 경우, ord('2')는 50이고 ord('0')는 48이므로 50 - 48 = 2로 정수 2로 변환됩니다.

  1. if start and n < 4: 만약 현재 숫자가 첫 번째 숫자이고 값이 4 미만이라면, 앞에 불필요한 0을 제거합니다.
    • n == 0: 첫 번째 숫자가 0이라면 아무 것도 추가하지 않고 건너뜁니다.
    • n == 1: 첫 번째 숫자가 1이라면, '1'을 추가합니다.
    • n == 2: 첫 번째 숫자가 2라면, '10'을 추가합니다.
    • n == 3: 첫 번째 숫자가 3이라면, '11'을 추가합니다.
    • 처리가 끝나면 start = False로 설정하여 다음 숫자부터는 이 로직을 건너뜁니다.
    • start 변수 사용 이유

      start 변수는 코드에서 첫 번째 숫자를 처리할 때와 그 이후의 숫자를 처리할 때를 구분하기 위한 플래그 변수입니다. 이 변수를 사용하는 이유는 첫 번째 숫자에 대해서만 앞에 불필요한 0을 제거해야 하기 때문입니다.

      처음에 start 변수는 True로 설정되어 있습니다. 이렇게 함으로써 첫 번째 숫자가 처리되는 경우에만 if start and n < 4: 조건문 내의 로직이 실행되게 됩니다.

      첫 번째 숫자를 처리한 후에는 start = False로 설정합니다. 이렇게 하면 다음 반복부터는 첫 번째 숫자와 관련된 로직이 실행되지 않고 else: 절로 넘어가게 됩니다. 이 else: 절에서는 해당하는 이진수 문자열을 직접 ans 문자열에 추가하는 것으로 처리합니다.

      요약하자면, start = False로 설정하는 이유는 다음과 같습니다:

      • 첫 번째 숫자를 처리한 후에는 불필요한 0을 제거할 필요가 없기 때문에, 이후 처리 과정에서 첫 번째 숫자와 관련된 로직을 건너뛰기 위함입니다.
      • 첫 번째 숫자 처리와 관련된 로직이 한 번만 실행되도록 하기 위함입니다.
  1. else: 첫 번째 숫자가 아닌 경우, 정수 n을 이용하여 eight 리스트에서 해당하는 이진수 문자열을 찾아 ans에 추가합니다.
  1. print(ans): 모든 숫자를 처리한 후 변환된 2진수를 출력합니다.


Uploaded by N2T

반응형
profile

나를 기록하다

@prao

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...