λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

🐍 Python/python-programming

[python] λ¬Έμžμ—΄ ν¬λ§€νŒ… : print Formattiing 3가지 방법 정리 & μ—°μŠ΅λ¬Έμ œ μΆ”μ²œ - λ°±μ€€ 3053 [νƒμ‹œ κΈ°ν•˜ν•™]

1. % μ—°μ‚°μž

  • 3가지 방법 쀑, κ°€μž₯ 였래된 λ°©μ‹μœΌλ‘œ μ΄μ œλŠ” 잘 쓰지 μ•ŠλŠ” μ˜›λ‚  방식에 속함(κ·Έλž˜λ„ μ•Œμ•„λ‘μž)
μ½”λ“œ μ„€λͺ…
%s λ¬Έμžμ—΄(String)
%c 문자 1개(character)
%d μ •μˆ˜(Integer, d : decimal)
%f λΆ€λ™μ†Œμˆ˜(floating-point)
%o 8μ§„μˆ˜
%x 16μ§„μˆ˜
%% Literal % (문자 % μžμ²΄)
# example code
# %d : μ •μˆ˜ν˜•
print('%d' %(3))  # 3
print('%d' %(3.529))  # 3 -> 주의: μ‹€μˆ˜λ₯Ό 넣어도, 버림을 ν•˜κ³  μ •μˆ˜λ§Œ 좜λ ₯!
print('%d %d' % (1, 2))  # 1 2


# %f : μ‹€μˆ˜ν˜•
print('%f' % 3.14)  # 3.14000 -> κΈ°λ³Έ : μ†Œμˆ˜μ  μ΄ν•˜ 5μžλ¦¬κΉŒμ§€ 좜λ ₯
print('%.3f' %(3.14))  # 3.140 -> μ†Œμˆ˜μ  λͺ‡μžλ¦¬ κΉŒμ§€ ν‘œμ‹œν• μ§€ . 뒀에 숫자λ₯Ό 뢙이면 λœλ‹€ (3자리)
print('%.2f' %(3.149))  # 3.15 -> μžλ™μœΌλ‘œ λ°˜μ˜¬λ¦Όλœλ‹€ μœ μ˜ν•˜κΈ°!


# %c (character) : ν•œκΈ€μžλ§Œ κ°€λŠ₯
print("character!! %c" %('a'))  # character!! a
print("character!! %c" %('abcd'))  # TypeError: %c requires int or char


# %s : λ¬Έμžμ—΄
my_str = 'My name is %s' % 'Dona'
print(my_str)  # My name is Dona


# μ—¬λŸ¬ 개 μΌλ•ŒλŠ” κ΄„ν˜Έ
print("μ €λŠ” %s와 %sλ₯Ό μž˜ν•©λ‹ˆλ‹€." % ("JAVA","Python"))

2. format λ©”μ†Œλ“œ

  • μ–΄λ–€ νƒ€μž…μ΄λ“  κ΄€μš©μ μœΌλ‘œ λ°›μ•„λ“€μ—¬ 많이 μ‚¬μš©ν•¨
  • μ†Œμˆ˜μ  자리 수 좜λ ₯ 유의 - μ•„λž˜ μ½”λ“œμ—μ„œ 확인
## example code
# λͺ¨λ‘ κ°€λŠ₯! μ–΄λ–€ νƒ€μž…μ΄λ“  κ΄€μš©μ μœΌλ‘œ 받아듀인닀!
print('Welcome to {}'.format("Python"))  # string
print('Welcome to {}'.format(2))  # int
print('Welcome to {}'.format(3.141592))  # float
print('Welcome to {}'.format('a'))  # char

#λ³€μˆ˜λͺ…μœΌλ‘œ λŒ€μž…κ°€λŠ₯
print('μ˜€λŠ˜μ€ {month}μ›” {day}일 μž…λ‹ˆλ‹€. {month}월은 κ°€μ •μ˜ λ‹¬μž…λ‹ˆλ‹€.'.format(month = 5, day = 10))
# out : μ˜€λŠ˜μ€ 5μ›” 10일 μž…λ‹ˆλ‹€. 5월은 κ°€μ •μ˜ λ‹¬μž…λ‹ˆλ‹€.


## μ—¬λŸ¬ 개일 경우 콀마(,)둜 κ΅¬λΆ„ν•˜μ—¬ λ„£μ–΄μ€€λ‹€.
name = "dona"
age = 32
print("제 이름은 {}이고 {}μ‚΄μž…λ‹ˆλ‹€.".format(name, age))

print('Welcome to {}, {}, {}'.format('python', '3.9', 'μ’‹μ•„μš”!'))

# μ—¬λŸ¬ 개 - μˆœμ„œλ₯Ό μ§€μ •ν•˜μ—¬ μ‚¬μš©ν•˜κΈ° : 인덱슀 값에 맞게 λŒ€μž…λ˜μ„œ κ²°κ³Ό 값이 좜λ ₯λœλ‹€.
print("μ €λŠ” {1}, {0}, {2}λ₯Ό μ’‹μ•„ν•©λ‹ˆλ‹€.".format('apple','orange','watermelon'))
# out : μ €λŠ” orange, apple, watermelonλ₯Ό μ’‹μ•„ν•©λ‹ˆλ‹€.

print('{1} x {0} = {2}'.format(2, 3, 2*3))  # 3 x 2 = 6
print('{0} x {1} = {2}'.format(2, 3, 2*3))  # 2 x 3 = 6


# -----------------------------------------------------------------
'''
{}.format()μ—μ„œ μ•Œμ•„λ‘μ–΄μ•Όν•  팁 - μ†Œμˆ˜μ  좜λ ₯
* :.nd μ˜΅μ…˜ (d : decimal μ •μˆ˜)
	- n은 총 자릿수의 갯수
	ex) '{:03d}'.format(int)
        - 숫자 3자리λ₯Ό 맞좰라. λΉˆμžλ¦¬λŠ” 0으둜 μ±„μ›ŒλΌ!
        - 3μžλ¦¬μ΄μƒμ΄λ©΄ X, μ•ˆλ„˜μ„λ•Œλ§Œ 0으둜 μ±„μš΄λ‹€! 
* :.nf μ˜΅μ…˜ (f : float μ‹€μˆ˜)
'''
print('λ‚΄κ°€ μ’‹μ•„ν•˜λŠ” μ˜ν™”λŠ” {:03d}'.format(7))  # 007
print('λ‚΄κ°€ μ’‹μ•„ν•˜λŠ” μ˜ν™”λŠ” {:0d}'.format(7))  # 7
print('λ‚΄κ°€ μ’‹μ•„ν•˜λŠ” μ˜ν™”λŠ” {:07d}'.format(7))  # 0000007
print('λ‚΄κ°€ μ’‹μ•„ν•˜λŠ” μ˜ν™”λŠ” {:03d}'.format(70))  # 070
print('λ‚΄κ°€ μ’‹μ•„ν•˜λŠ” μ˜ν™”λŠ” {:03d}'.format(707))  # 707
print('λ‚΄κ°€ μ’‹μ•„ν•˜λŠ” μ˜ν™”λŠ” {:03d}'.format(7078))  # 7078
print('-'*25)

# μ†Œμˆ˜μ  float ν†΅μ œ
print('μ›μ£Όμœ¨? {}'.format(3.141598))  # 3.141598 : 전체 print
print('μ›μ£Όμœ¨? {:.2f}'.format(3.141598))  # 3.14 : μ†Œμˆ˜μ  2자리수(반올림)
print('μ›μ£Όμœ¨? {:.3f}'.format(3.141598))  # 3.142 : μ†Œμˆ˜μ  3자리수(반올림)

# 반올림 확인
print('3.149 반올림? {:.2f}'.format(3.1491598))  # 3.15

 


3. f-string

  • python 3.6λΆ€ν„° μƒˆλ‘­κ²Œ λ‚˜μ˜¨ 방식
  • μ§κ΄€μ μ΄λΌμ„œ 많이 μ‚¬μš©ν•¨
## example code
# λ³€μˆ˜λͺ…μœΌλ‘œ λŒ€μž… κ°€λŠ₯
birth = "4μ›” 14일"
print(f"μ €μ˜ 생일은 {birth}μž…λ‹ˆλ‹€.")  # μ €μ˜ 생일은 4μ›” 14μΌμž…λ‹ˆλ‹€.

name = "dona"
age = 20
print(f"제 이름은 {name}이고 {age}μ‚΄μž…λ‹ˆλ‹€.")  # out : 제 이름은 dona이고 20μ‚΄μž…λ‹ˆλ‹€.
print(f"{name}λŠ” 내년에 {age+1}μ‚΄μ΄μ—μš”!")  # 연산도 κ°€λŠ₯함! out : donaλŠ” 내년에 21μ‚΄μ΄μ—μš”!

μ—°μŠ΅λ¬Έμ œ μΆ”μ²œ - λ°±μ€€ 3053 [νƒμ‹œ κΈ°ν•˜ν•™]

πŸ“Ž Problem

https://www.acmicpc.net/problem/3053

 

3053번: νƒμ‹œ κΈ°ν•˜ν•™

첫째 μ€„μ—λŠ” μœ ν΄λ¦¬λ“œ κΈ°ν•˜ν•™μ—μ„œ λ°˜μ§€λ¦„μ΄ R인 μ›μ˜ 넓이λ₯Ό, λ‘˜μ§Έ μ€„μ—λŠ” νƒμ‹œ κΈ°ν•˜ν•™μ—μ„œ λ°˜μ§€λ¦„μ΄ R인 μ›μ˜ 넓이λ₯Ό 좜λ ₯ν•œλ‹€. μ •λ‹΅κ³Όμ˜ μ˜€μ°¨λŠ” 0.0001κΉŒμ§€ ν—ˆμš©ν•œλ‹€.

www.acmicpc.net

πŸ“Ž Submission Code

ν•΄λ‹Ή λ¬Έμ œλŠ” 문제 μžμ²΄λŠ” μ‰¬μš°λ‚˜ 좜λ ₯값을 보면, μ†Œμˆ˜μ  6μžλ¦¬κΉŒμ§€ 그리고 λ°˜μ˜¬λ¦Όμ„ μ μš©ν•΄μ•Ό ν’€ 수 μžˆλŠ” λ¬Έμ œμ΄λ‹€.

였늘 배운 3가지 caseλ₯Ό λ¬Έμ œμ— μ μš©ν•˜μ—¬ 풀이할 수 μžˆλ‹€. format λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•œ 방법이 κ·Όμ†Œν•˜μ§€λ§Œ κ°€μž₯ λŠλ Έλ‹€. πŸ˜€

(컴퓨터에 따라 λ‹€λ₯Ό 수 있고, μ•„μ£Ό 큰 μ°¨μ΄λŠ” μ•„λ‹ˆκΈ΄ν•¨!)

'''
λ°˜μ§€λ¦„ R이 μ£Όμ–΄μ‘Œμ„ λ•Œ, μœ ν΄λ¦¬λ“œ κΈ°ν•˜ν•™μ—μ„œ μ›μ˜ 넓이와, νƒμ‹œ κΈ°ν•˜ν•™μ—μ„œ μ›μ˜ 넓이λ₯Ό κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.
μœ ν΄λ¦¬λ“œ κΈ°ν•˜ν•™μ˜ 원 넓이 :  PI * r^2
νƒμ‹œ κΈ°ν•˜ν•™μ˜ 원 넓이 : 2 * r^2
'''

# case 1 : f-string - λ©”λͺ¨λ¦¬ 32976KB / μ‹œκ°„ 68ms
import math
PI = math.pi
R = int(input())

print(f"{PI*R*R:.6f}")
print(f"{2*R*R:.6f}")


# case 2 : %f - λ©”λͺ¨λ¦¬ 32976KB / μ‹œκ°„ 68ms
import math
PI = math.pi
R = int(input())

print("%.6f" % (PI*R*R))
print("%.6f" % (2*R*R))

# case 3 : format - λ©”λͺ¨λ¦¬ 32976KB / μ‹œκ°„ 72ms
import math
PI = math.pi
R = int(input())

print("{:.6f}".format(PI*R*R))
print("{:.6f}".format(2*R*R))

Reference