백준 알파벳 다이아몬드

KIMYEONGJUN·6일 전
0
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

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

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

내가 이 문제를 보고 생각해본 부분

BufferedReader를 사용하여 입력을 효율적으로 처리하고, 공백으로 구분된 입력을 StringTokenizer를 통해 분리한다.
N, R1, C1, R2, C2는 각각 다이아몬드의 크기와 출력할 영역의 좌표를 나타난다.
다이아몬드의 높이 계산:
다이아몬드의 높이는 2N - 1로 계산된다.
이는 다이아몬드의 구조를 이해하는 데 필요한 값이다.
이중 루프를 통한 영역 출력:
외부 루프는 행(i)을, 내부 루프는 열(j)을 순회하여 주어진 영역을 출력한다.
각 행에 대해 StringBuilder를 사용하여 문자열을 효율적으로 생성한다.
상대적 좌표 계산:
현재 행과 열을 다이아몬드의 높이로 나눈 나머지를 계산하여 상대적인 좌표를 구한다.
이는 다이아몬드 패턴을 반복적으로 생성하는 데 필요한다.
중앙으로부터의 거리 계산:
다이아몬드의 중앙(좌표 (N-1, N-1))으로부터의 거리를 계산한다.
이 거리를 통해 해당 위치에 알파벳이 있는지 점인지 판단한다.
알파벳 또는 점 출력:
거리가 N-1보다 크면 해당 위치는 다이아몬드 범위를 벗어나므로 점(.)을 추가한다.
그렇지 않으면, 거리를 26으로 나눈 나머지를 사용하여 알파벳을 계산하고 추가한다.
행 출력:
StringBuilder에 저장된 문자열을 출력한다.

코드로 구현

package baekjoon.baekjoon_25;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

// 백준 1262번 문제
public class Main869 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int R1 = Integer.parseInt(st.nextToken());
        int C1 = Integer.parseInt(st.nextToken());
        int R2 = Integer.parseInt(st.nextToken());
        int C2 = Integer.parseInt(st.nextToken());

        // 다이아몬드의 높이
        int diamondHeight = 2 * N - 1;

        for(int i = R1; i <= R2; i++) {
            StringBuilder sb = new StringBuilder();
            for(int j = C1; j <= C2; j++) {
                // 다이아몬드 안의 상대적 좌표 계산
                int effectiveRow = i % diamondHeight;
                int effectiveCol = j % diamondHeight;

                // 중앙으로부터의 거리 계산
                int distance = Math.abs(N - 1 - effectiveRow) + Math.abs(N - 1 - effectiveCol);

                // 알파벳인지 점인지 판별
                if(distance > N - 1) {
                    sb.append("."); // 다이아몬드의 범위를 벗어나면 점
                } else {
                    sb.append((char) ('a' + (distance % 26))); // 알파벳 출력
                }
            }
            System.out.println(sb); // 한 줄 출력
        }
        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글