본문 바로가기

D. Python

[백준] Python 배우기 (2588) - 인덱스 연산, end인자, sep인자

2588 문제  

(세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다.

 (세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다.

(1)과 (2)위치에 들어갈 세 자리 자연수가 주어질 때 (3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하시오.

 

-  곱셈(2588번)

 

[제출코드] 정답

*주의

a = int(input())
b = input()

a1 = a * int(b[2])
a2 = a * int(b[1])
a3 = a * int(b[0])
a4 = a * int(b)

print (a1, a2, a3, a4, sep='\n')

코드풀이 및 필요 개념

문제 조건

첫째 줄에 (1)의 위치에 들어갈 세 자리 자연수가, 둘째 줄에 (2)의 위치에 들어갈 세자리 자연수가 주어진다.

첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.

 

코드상단
a = int(input())
b = input()

좌변

둘째 줄에 a값과

둘째 줄에 b값을 도출하도록 요구하고 있으므로, 그에 맞게 각각의 변수를 설정한다.

 

우변

숫자, 문자, 기호 등의 키보드 입력을 받는 input() 함수는 입력 변수를 문자열 데이터(str)로 반환하기 때문에 필요한 데이터 형으로 변환하여야 한다.

a의 경우 사칙연산 계산을 위해 int 정수형으로 변환한다.

b의 경우 곱셈 계산식에 따라 b의 각 자리수와 a값과의 곱셈이 필요하다.

 

예를들어 문제에서 요구하는 (3)의 경우

a값과 b의 첫번째 자리수와의 곱을 의미한다.

 

따라서 b는 정수로 변환하지 않고, 문자열로써 각각의 인덱스 지정을 통해 계산한다면 조금 더 쉽게 코드를 만들 수 있을 것이다.

 

a = input()           #프롬프트에 입력한 값을 입력받는다.

a = int(input())    #해당 값을 정수로 변환하여 값을 반환한다.

type(a) = int       #a는 int 정수형으로 도출됨

 

b = input()           #프롬프트에 입력한 값을 입력받는다.

type(b) = str       #a는 str 문자열로 도출됨

 

코드중반
a1 = a * int(b[2])
a2 = a * int(b[1])
a3 = a * int(b[0])
a4 = a * int(b)

코드상단 풀이에서 언급한 대로 문제에서 요구하는 바가 아래와 같으므로,

문제 이미지의 (3),(4),(5)는 b의 각 자리수 정수와의 곱의 결과

문제 이미지희 (6)은 a와 b의 곱의 결과

 

문자열로 받은 b는 한자리 숫자 3개로 구성되며, 예시로 b = [1, 2, 3]의 경우

각각의 인덱스 값은 아래와 같다.

*주의 할 것은 자리값은 앞에서부터 0으로 시작한다는 것.

문자열 구분을 통해 각 자리숫자를 편하게 곱할 수 있으나,

정수와 문자열의 곱셈은 문자열을 정수만큼 반복하는 것과 같다.

ex)

>>> a=2
>>> b=input()

17

>>> print(a*b)

1717

 

따라서 b를 정수형으로 변환하여 연산을 수행하도록 한다.

a1 = a * int(b[2])

 

(3) a1 = a * int(b[2])

(4) a2 = a * int(b[1])

(5) a3 = a * int(b[0])

(6) a4 = a * int(b)

 

코드하단
print (a1, a2, a3, a4, sep='\n')

각각의 계산 결과를 한줄씩 출력하도록 하고 있으므로,

각 계산결과를 출력하도록 print()함수를 사용한다.

다만, 한줄씩 차례로 출력하도록 print() 실행 시 항상 문자열 마지막에 \n(줄바꿈 문자)을 추가하면 출력될 때 줄 바꿈이 일어난다.

 

*참고

◆ end인자와 sep인자

 ▷ end='\' 

- 출력함수 print() 여러개 사용 시, 괄호 안에 출력할 object 다음에 사용함

- print() 함수를 사용할 경우 디폴트로 end="\n"이 생략되어 있기 때문에 줄바꿈이 일어남.

- 모든 항목이 프린트 된 후 마지막에 추가되는 문자열 지정

(지정없으면 기본값으로 줄바꿈 문자(\n))

>>> print("No new line"); print("ok?")
No new line ok?

>>> print("No new line", end=" "); print("ok?")
No new line ok?

- 줄바꿈을 생략하고자 하면 end의 큰따옴표 안에 공백 혹은 문자 등을 입력하면

줄바꿈 마지막 효과가 변경된다.

>>> print("No new line", end="ff"); print("ok?")
No new lineffok?

>>> print("No new line", end="\n"); print("ok?")
No new line
ok?

 

▷ sep='\'

- 출력함수 print() 안에 여러개 변수를 출력하고자 할 때 괄호 안에 출력할 마지막 object 다음에 사용함

- 콤마로 구분된 문자열을 다르게 결합할 수 있다.

- 여러항목 프린트 할 때 항목과 항목 사이에 들어가는 문자열 지정

(지정 없으면 기본값으로 공백문자) 

print("Hello","August")
Hello August

print("Hello","August", sep="")
HelloAugust

- 줄바꿈을 생략하고자 하면 end의 큰따옴표 안에 공백 혹은 문자 등을 입력하면

줄바꿈 마지막 효과가 변경된다.

>>> print("Hello","August", sep="\n")
Hello
August

>>> print("Hello","August", sep="rrr")
HellorrrAugust

 

◆ 문자열 연산

숫자*숫자 => 곱셈연산

문자열*문자열=>오류(연산 불가)

숫자*문자열 => 문자열 반복

문자열*숫자 => 문자열 반복

https://www.acmicpc.net/