반응형

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())

요즘은 백준에서 파이썬에서는 32ms이 최고시간인 거 같다.

 

문제를 풀면서 나도 위와 같은 형식의 f-string이 될까 고민하면서 시험적으로 동작시켰는데 결과적으로 먹히게 되었다.

내가 궁금했던 포인트는 아래와 같다.

  1. f-string의 중괄호 안에 또 중괄호가 들어가도 괜찮을까?
  2. 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______
반응형

+ Recent posts