백준 2588번 풀이 및 응용

문제

세 자리수의 곱셈에 대한 문제로, 순서대로 출력값이

  1. 일의 자리
  2. 십의 자리
  3. 백의 자리
  4. 전체 결과값

이 나오게 된다. 즉 123*456을 입력하면(물론 숫자 두 개로 입력받는다)

  1. 123 * 4
  2. 123 * 5
  3. 123 * 6
  4. 123 * 456

이렇게 네 가지로 출력하는 구조.

풀이

a=int(input())
b=input()
print(a*int(b[-1]))
print(a*int(b[-2]))
print(a*int(b[0]))
print(a*int(b))

어? 에디터 블록 켰더니 코드블록이 되네…? 무튼.

세자리수로 고정되어 있기 때문에 음수로 인덱싱해서 출력했다. input으로 입력받는 건 문자열이기때문에 int로 안 바꿔주면 결과값을 보자마자 여러분은 마른세수를 하게 된다. 문자열이 그냥 쭉 반복돼서 나오거든…

응용

-For문

a=int(input())
b=input()
for i in range(1,len(b)+1):
    print(a*int(b[len(b)-i]))
print(a*int(b))

반복문은 기본적으로 음수 인덱싱을 이용하지 않고, 별찍기때처럼 범위나 값에 변화를 줘서 진행할 예정이다. For문의 범위는 len(b)에서 뺄 값이기 때문에 1부터 숫자 자릿수+1로 잡았다. python의 range는 range(3)이면 길이는 3이지만 값이 0, 1, 2로 시작하기 때문.

-While문

a=int(input())
b=input()
i=len(b)
while i >= 1:
    print(a*int(b[i-1]))
    i=i-1
print(a*int(b))
a=int(input())
b=input()
i=len(b)
while i >= 1:
    i=i-1
    print(a*int(b[i]))
print(a*int(b))

둘 다 While이다.

for문과 while문은 같은 반복문이지만 맥락이 다르다. for문은 범위 안에서 반복하는 반복문이고, while은 특정 조건을 만족하기 전까지 반복하는 반복문. 그래서 돌아가는 용도에 따라 최적화된 반복문이 다르다.