백준 알파벳 다이아몬드

KIMYEONGJUN·2024년 12월 16일
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개의 댓글

관련 채용 정보