Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 4 additions & 10 deletions 2025-02-01/terry/b_1913.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,22 +23,16 @@ public static void main(String[] args) throws IOException {

arr[x][y] = count;

/**
* 0: 상
* 1: 우
* 2: 하
* 3: 좌
*/
int v = 0; // 방향
int step = 1; // 증감 값
int repeat = 0; // 두 번씩 반복
int[] dx = {-1, 0, 1, 0};
int[] dy = {0, 1, 0, -1};
while (x >= 0 && y >= 0) {
for (int i = 0; i < step; i++) {
count++;
if (v == 0) x -= 1; // 상
if (v == 1) y += 1; // 우
if (v == 2) x += 1; // 하
if (v == 3) y -= 1; // 좌
x += dx[v];
y += dy[v];
if (x < 0 || y < 0) break;
arr[x][y] = count;
}
Expand Down
70 changes: 70 additions & 0 deletions 2025-02-01/terry/b_1913_2.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package study.d_250201;

import java.util.*;
import java.io.*;

public class b_1913_2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

//given
int n = Integer.parseInt(br.readLine());
int m = Integer.parseInt(br.readLine());
int[][] arr = new int[n][n];


// when
int count = 1;

int half = n / 2;
int step = 2;

int x = half;
int y = half;
arr[half][half] = count;

int[] dx = {0, 1, 0, -1};
int[] dy = {1, 0, -1, 0};

int[] vx = {1, 0, -1, 0};
int[] vy = {0, -1, 0, 0};
int v = 0; // 0, 1, 2, 3

for (int i = 0; i < half; i++) {
x = half - i - 1;
y = half - i;
for (int j = 0; j < 4; j++) { // 상, 우, 하, 좌 (4번 반복)
for (int k = 0; k < step; k++) {
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

for 안에 if, else구문은 중요도나 비중이 높은 순서대로 적어주는게 코드가 좀 더 직관적이고 읽기 좋아
이거 같은 경우는 if 가 마지막 한번만 실행되고 대부분은 else가 실행되기 때문에 사실 순서를 바꾸는게 좋고 더 나아가 아래처럼 아예 if, else를 안쓰는게 가장 좋은 거 같아

for (int k = 0; k < step-1; k++) {
    arr[x][y] = ++count;
    x += dx[v];
    y += dy[v];
}
// 방향 전환
x += vx[v];
y += vy[v];

이게 좀 더 직관적이고 깔끔한거 같아.

arr[x][y] = ++count;
if (k == (step - 1)) { // step의 마지막은 방향 전환
x += vx[v];
y += vy[v];
} else { // 직선 이동
x += dx[v];
y += dy[v];
}
}
v = (v + 1) % 4; // step 끝나면 방향 전환
}
step += 2; // 네 바퀴 다돌면 step 증가
}


//then
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
bw.write(arr[i][j] + " ");
if (arr[i][j] == m) {
x = i + 1;
y = j + 1;
}
}
bw.newLine();
}

bw.write(x + " " + y);
br.close();
bw.close();
}
}