내가 생각했을때 문제에서 원하는부분
첫째 줄에 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();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.