본문 바로가기
# 공부/# 그 외 흥미로운 문제들

#[백준::1212] 8진수 2진수

by 쁘레레레레레 2021. 12. 9.

오늘은 러시아어 공부를 하다가 머리 식힐겸 풀다 딴거하러가거나 능력이 안되어 못풀거나 뭐.. 그런문제를 풀어보려고 한다.

 

우선 #[백준::1212 Py] 8진수 2진수

 

약 한달전 c++로 풀던게 있는데, 이때 내 기억으로 풀다가 뭔일이 있어서 그만둔걸로 기억한다.

 

아무튼 최근 python을 가르치며 좀 더 공부를 해야겠단 생각으로 python으로 풀어보는데, 역시 이런 문제들은 기가막히게 간단하게 풀린다.

 

설명도 매우 간결하다.

일단 파이썬 내부함수엔 2,8,10,16진수를 변환시켜주는 애가 있다.2진수는 bin, 8진수는 oct, 10진수는 int, 16진수는 hex우선 python터미널을 열어서 테스트를 해봤다. 일단 난 oct나 bin을 어떤 자료형으로 표현하는가에 대해 딱히 생각해본적이 없었다.

 

결과는 간단했다. 10진수에 1107이란 수가 들어갔다고 가정하자.bin(1107)이라고 입력하면 , 0b010001010011이런식으로 나올건데, 자료형은 str형으로 나온다.oct(1107) -> 0c2123 / hex(1107) - >0x453이런식으로 나오는데 전부 앞에 0하고 각 알파벳 하나가 나온다.

 

문제는 8진수를 입력받고 2진수로 뽑아라인데 이것역시 간단하다.

예제기준으로 설명하겠다.

1. 314를 str형으로 그대로 받아와준다.

2. int형에 0o와 314를 붙여준 문자열을 넣어준 후 두번째 인수로 8을 넣어준다.

3. 그 값을 bin함수를 이용해 다시 변환해준다.

4. 출력시 replace를 사용해 0b를 제거해준다.

 

여기서 str형 -> int -> oct -> str결과

이렇겐데, 음.. 일단 oct bin hex의 경우 인수는 하나를 받는다. 반면 int의 경우 두개도 가능한데, 

2번을 보면 0o314는 10진수로 204라는 값이 나오는데, 두번째 있는 8은 들어오는 자료형의 크기라고한다.

한마디로 int('0o314',8) 이런식인데, 8진수 314를 str크기의 자료형으로 가져와서 int로 캐스팅해주겠단 뜻

그래서 어딘가에 대입했다면, 204라는 10진수가 들어갈것이고, 그걸 bin을 씌워줘서 변환을 해주면

0b가 앞에 붙은 str형이 될것이고, strip이나 replace를 사용해 0b를 제거해주면 된다.

 

참고로 strip을 써봤는데, 맨 뒤도 같이 짤리는 증상이 발견됐다.

내가 알기로 strip의 '0b'를 주면 0b를 포함한 애들이 잘리는줄 알았는데, 0이 포함되었으니 얘도 잘리나보다..

했는데 lstrip도 똑같이 잘린다.  document가봐야겠다.

 

 

아무튼 여긴 코드주의가 없다.

#[백준::1212 Py]

# 8진수 -> 2진수

import sys

nInput = sys.stdin.readline().strip() # rstrip도 가능

nInput = int(('0o'+nInput),8)
result = bin(nInput)

print(result.replace('0b',''))