본문 바로가기
알고리즘/백준

1262.알파벳 다이아몬드

by 1.5볼트 2023. 2. 27.
728x90

문제

알파벳 다이아몬드는 정수 길이의 마름모가 여러 개 누적되는 모양이다. 각각의 마름모는 하나의 알파벳 소문자로 그리며, a로 시작해서 z로 끝난다. (가운데에서부터) 그리고, z 이후에는 다시 a로 시작한다.

알파벳 다이아몬드는 다음과 같이 생겼다.

동호는 이런 알파벳 다이아몬드를 타일로 만들어서, 방 바닥을 타일로 모두 채웠다. 예를 들어, N = 5인 아스키 다이아몬드를 세로 크기가 17, 가로 크기가 46인 방에 채운다면 다음과 같은 모양이 된다.

타일 하나위 위치는 행과 열을 이용해 표현한다. 행은 위에서부터 0행, 1행 이고, 열은 왼쪽부터 0열, 1열이다.

동호는 자신의 방의 어떤 부분 직사각형에 쓰여 있는 알파벳이 궁금해졌다. N이 주어지고, 동호가 알고 싶어하는 직사각형의 왼쪽 위 좌표 (R1, C1)와 오른쪽 아래 좌표 (R2, C2)가 주어질 때, 그 직사각형에 쓰여 있는 알파벳을 출력하는 프로그램을 작성하시오. 동호의 방의 크기는 무한하다. (x, y)는 x행 y열을 의미한다.

입력

첫째 줄에 5개의 정수 N, R1, C1, R2, C2가 주어진다.

출력

(R2 - R1 + 1)줄에 (C2 - C1 + 1)개의 문자를 출력한다.

제한

  • 1 ≤ N ≤ 20,000
  • 0 ≤ R1 ≤ R2 ≤ 20,000
  • 0 ≤ C1 ≤ C2 ≤ 20,000
  • 0 ≤ (R2 - R1 + 1) × (C2 - C1 + 1) ≤ 40,000

맞일단 이런 문제 설명부터 이상한 문제는

여기서 n이 26이 넘어가면 다시 a부터 시작하는 줄 알았는데 그게 맞긴 한데 aaaaa 이런 식이 아니라 아니라 azyx..이런식으로 뒤에 붙어서 계속 나온다 무슨 소리인지 이해할 수 없겠지만 이런 문제는 푸는 게 문제가 아닌 듯

처음에 다시 처음부터 반복하는 줄 알고 이렇게 했지만 틀렸다고 한다. 이유도 모르고 이런 포멧팅이 문제인 줄 동호야 잘 좀 하자 타일 따위 궁금해하지 말고


t='zyxwvutsrqponmlkjihgfedcbabcdefghijklmnopqrstuvwxyz'
n,r1,c1,r2,c2=map(int,input().split())
n%=26
n=26 if not n else n
a=2*n-1
n=26-n
c3=c2//a+1
y=list(range(n,26))+list(range(24,n-1,-1))
y*=int(r2//len(y)) +1
for i in y[r1:r2+1]:
    print((f"{t[n:n+(i-n)]+t[-(n+(i-n)+1):-n-1]+t[n]:.^{a}}"*c3)[c1:c2+1])

 

'알고리즘 > 백준' 카테고리의 다른 글

축구  (0) 2023.03.12
1011.Fly me to the Alpha Centauri  (0) 2023.03.09
1024.수열의 합  (0) 2023.02.26
2839.설탕 배달  (0) 2023.02.25
1935.후위 표기식2  (0) 2023.02.24

댓글