반응형
https://www.acmicpc.net/problem/2444
다이아몬드 형태로 별을 찍는 문제이다.
이 문제를 해결하는 여러 방법이 있겠지만, f-string의 가운데 정렬 기능을 이용해서 pythonic하게 풀어보게 되었다.
정답 코드
n = int(input())
for i in range(1, n + 1):
print(f"{'*' * (2 * i - 1):^{2 * n - 1}}".rstrip())
for i in range(n - 1, 0, -1):
print(f"{'*' * (2 * i - 1):^{2 * n - 1}}".rstrip())
문제를 풀면서 나도 위와 같은 형식의 f-string이 될까 고민하면서 시험적으로 동작시켰는데 결과적으로 먹히게 되었다.
내가 궁금했던 포인트는 아래와 같다.
- f-string의 중괄호 안에 또 중괄호가 들어가도 괜찮을까?
- f-string의 중괄호 안에는 Python 문법만 들어가야 할 거 같은데, 위와 같이 Python 문법과 :^ 같은 format 옵션이 섞여도 되는가?
1번은 {2 * n - 1} 가 바깥 중괄호 안에 있으면서 또 Python 문구로서 evaluate이 되는 것을 봤기 때문에 궁금했던 것인데, 어쨌든 눈으로 확인이 되었으니 "된다"로 이해가 되었다.
2번도 답은 "가능하다"로 확인했으나 이에 대해 더 조사를 해봤고, 아래 답을 얻었다.
유효한 f-string syntax:
f"{expression:format_specifier}"
- Expression: 일반적인 유효한 Python 구문
- Format specifier: Expression을 어떻게 format할지 정의하는 부분. 정렬(^, <, >), 너비(width), padding, 소수점자리(precision) 등이 들어갈 수 있다.
즉 f-string의 중괄호 안에는 일반적인 Python 구문과 format 옵션이 같이 들어갈 수 있다.
아래와 같은 예시로도 위 사실을 확인할 수 있다. 중괄호 안에 Python 구문과 format 옵션이 같이 명시되있다.
print(f"{'abc' * 3:_^21}")
______abcabcabc______
반응형
'baekjoon' 카테고리의 다른 글
[BOJ] 2563번: 색종이 / Python - sum으로 2차원 list를 1차원 list로 변환 (0) | 2024.12.31 |
---|---|
[BOJ] 1157번: 단어 공부 / Python - collections의 Counter와 match 문법 사용 (0) | 2024.12.25 |
[BOJ] 25083번: 새싹 / Python - multiline string, raw string 사용 (0) | 2024.12.23 |
[BOJ] 5622번: 다이얼 / Python (0) | 2024.12.21 |
[BOJ] 11720번: 숫자의 합 / Python - Generator Expression 사용 필기 (0) | 2024.12.21 |