Strings - String Formatting

binary, octal(8진법), hexadecimal(16진법), decimal(10진법)을 자동으로 처리해주는 string의 메서드가 있다는 것을 알게된 소중한 시간이었다.

문제 풀이

문제 해석

  • 주어지는 정수 n에 대해 1부터 n까지에 대해 10진수, 8진수, 16진수, 2진수를 출력하라
  • 정수 number라는 매개변수에 대한 print_formatted 라는 함수를 완성시킬 것
  • 1부터 n까지의 위의 4개의 값은 위와 같은 순서로 한 줄에 출력되어야 하는데, 모두 2진수의 문자열 너비를 가져야 하며 서로 공백으로 구분되어야 한다.

Input Format

  • 정수 n이 주어진다.

문제 풀이

이미 주어진 코드 해석

1
2
3
4
5
6
def print_formatted(number):
# Your code goes here

if __name__ == '__main__':
n = int(input())
print_formatted(n)
  • 해커랭크에서 정수를 입력받아 우리가 완성할 함수에 인수로 넣는 작업까지는 해주는 것을 알 수 있다.

Pseudocoding

  • 2진수를 기준으로 너비를 정해주기
  • 10진수는 str메서드로 문자열로 만들어주고, 나머지는 파이썬 빌트인 메서드로 각 진법에 맞게 문자열로 만들기
  • ‘0x’ 등으로 앞에 진법을 알려주는 문자는 슬라이싱해주기
  • 처음에 도출한 너비만큼 공백을 가진 문자열로 만들어주기

코드 작성하기

1
2
3
4
5
6
7
8
def print_formatted(number):
width = len(bin(number))-2
for i in range(1, number+1):
dec_str = str(i).rjust(width)
oct_str = oct(i)[2:].rjust(width)
hex_str = hex(i).upper()[2:].rjust(width)
bin_str = bin(i)[2:].rjust(width)
print(dec_str, oct_str, hex_str, bin_str)

시행착오 및 교훈

  • 제목에 string formatting이 있는데 while문으로 몫과 나머지 구하면서 하나하나 진수를 만들고있었다…
  • hexadecimal 구하는 법을 검색하다가 그제서야 hex, oct, bin 메서드가 있음을 알고 엄청나게 쉽게 풀었다.
  • rjust라는 메서드로 문자열의 너비와 그 너비만큼 채워넣을 문자를 지정할수 있다는 것을 알게된 것은 큰 수확이다.

느낀 점

  • 새로운 메서드를 무더기로 알게 되어 기쁘다.