본문 바로가기
코딩테스트/[python]정올

[python] 정올 1291 : 구구단

by o_oo 2022. 3. 17.

서론

다시 코테 공부를 시작하겠다고 생각하고(생각한지는 대략 3개월전) 오랜만에 코테 문제를 푸려고 했는데 기억이 하나도 안났다.(사실 애초에 코테 공부 제대로 해본적 없음)

 

그래도 어쩌겠냐. 코테 준비의 필요성은 너무 뼈져리게 느끼고있는데... 시작부터 차근차근 하자는 마음가짐으로 내 기준 쉽다고 생각되는 정올 Beginner_coder부터 시작해보자 싶어서 풀이를 시작해보았다.

 

(※ 해당 풀이는 개인적인 풀이 기록이므로 좋은 코딩이라고 필자도 생각하지 않습니다. 참고만 하세요.)


문제

http://jungol.co.kr/bbs/board.php?bo_table=pbank&code=1291&sca=2010

 

JUNGOL

 

www.jungol.co.kr


문제

원하는 구구단의 범위를 입력받아 해당 구간의 구구단을 출력하는 프로그램을 작성하시오.

 

 

<처리조건>

(1) 구간의 처음과 끝을 입력받는다. 

(2) 입력된 구간은 반드시 처음 입력 값이 끝의 입력 값보다 작아야 하는 것은 아니다.

    즉 입력된 구간의 범위는 증가하거나 감소하는 순서 그대로 출력되어야 한다.​ 

 

입력형식

구구단의 시작 범위 s,와 끝 범위 e를 입력받는다.(s와 e는 2부터 9사이의 정수) 

하나의 결과가 출력되면 프로그램을 종료한다.

 

출력형식

시작 범위와 끝 범위사이의 구구단을 출력하되 모든 값과 부호 사이는 공백으로 구분하여 아래 출력 예와 같이 줄을 맞추어 출력해야 한다.

구구단 사이는 3개의 공백으로 구분한다. 

데이터의 크기가 주어진 범위를 벗어날 경우는 "INPUT ERROR!"를 출력하고 s와 e를 다시 입력받는다.


나의 풀이

while 1:
    a, b = map(int, input().split())
    
    if a < 2 or a > 9 or b < 2 or b > 9:
        print("INPUT ERROR!")
        continue
        
    if a>=b: v=-1
    else: v = 1

    for j in range(1, 10):
        for i in range(a, b + v, v):
            print('{0} * {1} = {2:>2}'.format(i, j, i*j), end='   ')
        print()
    break

출력할 때 format을 사용했는데 유용해보인다. 여러가지 까다로운 출력 요건을 맞추기 편해보임.

 

+ 추가

이건 기록에 보니 대략 반년전에 같은 문제에 내가 푼거인듯.

print 부분에서 차이가 보인다. 

while 1:
  a, b = map(int, input().split())
  if a < 2 or a > 9 or b < 2 or b > 9:
    print("INPUT ERROR!")
    continue
 
  for i in range(1, 10):
    if a >= b:
      for x in range(a, b - 1, -1):
        print(x, "*", i, "=", str(x * i).rjust(2, " "), end = "   ")
    else:
      for x in range(a, b + 1):
        print(x, "*", i, "=", str(x * i).rjust(2, " "), end = "   ")
    print("")
  break

여기선 한자리 수를 표현할 때 앞에 공백을 붙이는 방식으로 rjust를 사용했다.

문자열.rjust(자리수, 채울문자) 방식으로 사용했다. 문자열을 우측에 채우고 자리수에서 문자열의 자리수를 뺀 부분에 지정한 문자를 채운다.

(자매품으로 ljust도 있다.)


+ 피드백과 좋은 풀이 방법은 언제든지 환영입니다!

댓글