[CodeTree] ์˜ˆ์ˆ ์„ฑ(์‚ผ์„ฑ SW ์—ญ๋Ÿ‰ํ…Œ์ŠคํŠธ 2022 ์ƒ๋ฐ˜๊ธฐ ์˜ค์ „ 2๋ฒˆ ๋ฌธ์ œ)

2024. 9. 13. 18:36ยท๐Ÿ’ฏ CodingTest/CodeTree

๋ฌธ์ œ

https://www.codetree.ai/training-field/frequent-problems/problems/artistry/description?page=4&pageSize=5

 

์ฝ”๋“œํŠธ๋ฆฌ | ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ค€๋น„๋ฅผ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •์„

๊ตญ๊ฐ€๋Œ€ํ‘œ๊ฐ€ ๋งŒ๋“  ์ฝ”๋”ฉ ๊ณต๋ถ€์˜ ๊ฐ€์ด๋“œ๋ถ ์ฝ”๋”ฉ ์™•์ดˆ๋ณด๋ถ€ํ„ฐ ๊ฟˆ์˜ ์ง์žฅ ์ฝ”ํ…Œ ํ•ฉ๊ฒฉ๊นŒ์ง€, ๊ตญ๊ฐ€๋Œ€ํ‘œ๊ฐ€ ์—„์„ ํ•œ ์ปค๋ฆฌํ˜๋Ÿผ์œผ๋กœ ์ค€๋น„ํ•ด๋ณด์„ธ์š”.

www.codetree.ai


๋ฐฐ์šด ์ 

- ๋ฐฐ์—ด ํšŒ์ „

- ๊ทธ๋ฃนํ™” DFS

- ๊ทธ๋ฃน๋ณ„ ์ €์žฅ ๊ณ ๋ฏผ

- ๊ทธ๋ฃน์— ๋Œ€ํ•œ ์นด์šดํŠธ (์กฐํ•ฉ) 

  - ํ•˜์ง€๋งŒ ๋‹จ์ˆœํžˆ ์กฐํ•ฉ Combination์œผ๋กœ ํ’€๊ธฐ์—” ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒฝ์šฐ์˜ ์ˆ˜

  - ํ•„์š”ํ•œ ์กฐํ•ฉ๋งŒ ์…€ ์ˆ˜ ์žˆ๋„๋ก ์ƒ๊ฐํ•˜๊ธฐ


์ฝ”๋“œ

๋”๋ณด๊ธฐ
๋”๋ณด๊ธฐ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Set;
import java.util.StringTokenizer;


class Group{
	int cnt;
	int number;

	public Group(int cnt, int number) {
		this.cnt = cnt;
		this.number = number;
	}
}

public class Main{
	static int N, numOfGroup, answer;
	static int[][] board;
	static Group[][] marking;
	static boolean[][] visited;
	static HashMap<Group, Integer> groupAdjCnt;
	static int[][] dxy = {{-1,0},{1,0},{0,-1},{0,1}};
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		N = Integer.parseInt(br.readLine());
		answer = 0;

		board = new int[N][N];

		// ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ
		for(int i = 0; i < N; i++) {
			st = new StringTokenizer(br.readLine());
			for(int j = 0; j < N; j++) {
				board[i][j] = Integer.parseInt(st.nextToken());
			}
		}


		// 3 ๋ฒˆ ์ ์ˆ˜๋ฅผ ์ธก์ •
		for(int t=0; t < 4; t++) {
			visited = new boolean[N][N];	
			marking = new Group[N][N];


			// ๊ทธ๋ฃนํ™” ๋ฐ ๊ทธ๋ฃนํ™” ๊ฐ์ฒด๋ฅผ marking ๋ฐฐ์—ด์— ์ €์žฅ
			for(int i=0; i < N; i++) {
				for(int j=0; j < N; j++) {
					if(marking[i][j] != null) continue;

					groupMethod(i,j, board[i][j]);
					markGroup(i,j);
				}
			}			

			visited = new boolean[N][N];
			// ๊ทธ๋ฃนํ™” ๋œ ๊ทธ๋ฃน๋“ค์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ณ„์‚ฐ ์ˆ˜ํ–‰
			for(int i=0; i < N; i++) {
				for(int j=0; j < N; j++) {
					if(visited[i][j]) continue;

					groupAdjCnt = new HashMap<>(); // ๊ทธ๋ฃน ํ•˜๋‚˜์— ๋Œ€ํ•ด์„œ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์ดˆ๊ธฐํ™”
					groupDfs(i, j, marking[i][j]);
					calculateScore(i,j);
				}
			}

			// ๋๋‚˜๋ฉด ํ•œ๋ฒˆ์”ฉ ํšŒ์ „์„ ์‹œ์ผœ์ค˜์•ผํ•จ.
			board = rotate();
		}

		System.out.println(answer);
	}

	static void groupDfs(int i, int j, Group base) {
		if(i < 0 || j < 0 || i >= N || j >= N || visited[i][j]) return;

		if(marking[i][j] == base) {
			visited[i][j] = true; // ํ˜„์žฌ ํƒ์ƒ‰์ค‘์ธ ๊ทธ๋ฃน์— ๋Œ€ํ•ด์„œ๋งŒ -> ํ•ด๋‹น ๊ทธ๋ฃน์— ๋Œ€ํ•œ ๊ณ„์‚ฐ์€ ์ด๋ฒˆ์— ๋๋ƒ„. 4๋ฐฉํ–ฅ ํƒ์ƒ‰ํ›„
			
			for(int d = 0; d < 4; d++) {
				groupDfs(i+dxy[d][0], j+dxy[d][1], base);
			}
		}
		else {
			groupAdjCnt.put(marking[i][j], groupAdjCnt.getOrDefault(marking[i][j], 0) + 1);
			return;
		}
	}

	static void calculateScore(int x, int y) {
		Group base = marking[x][y];
		Set<Group> adjList = groupAdjCnt.keySet();

		for(Group adjGroup : adjList) {
			int score = (base.cnt + adjGroup.cnt) * base.number * adjGroup.number * groupAdjCnt.get(adjGroup);
			if(score != 0) {
				answer += score;
			}
		}
	}

	static int[][] rotate() {
		int[][] rotated = new int[N][N];

		// 1. ์‹ญ์ž๋ชจ์–‘ ๋ฐ˜์‹œ๊ณ„ ํšŒ์ „
		// ์‹ญ์ž ๊ฐ€๋กœ์ถ• ๋ณต์‚ฌ (๊ธฐ์กด ์ž…๋ ฅ board ๊ธฐ์ค€ ํšŒ์ „)
		for(int i=0; i<N; i++) {
			rotated[(N-1) - i][N/2] = board[N/2][i];
		}
		// ์‹ญ์ž ์„ธ๋กœ์ถ• ๋ณต์‚ฌ (๊ธฐ์กด ์ž…๋ ฅ board ๊ธฐ์ค€ ํšŒ์ „)
		for(int i=0; i<N; i++) {
			rotated[N/2][i] = board[i][N/2];
		}

		// 2. ๊ฐ ๋„ค ๊ตฌ์—ญ ์‹œ๊ณ„๋ฐฉํ–ฅ ํšŒ์ „
		rotateQuarter(0, 0, rotated); 
		rotateQuarter(0, N/2+1, rotated); 
		rotateQuarter(N/2+1, 0, rotated); 
		rotateQuarter(N/2+1, N/2+1, rotated); 

		return rotated;
	}

	static void rotateQuarter(int x, int y, int[][] rotated){
		// ๋ฐ˜๋ณต๋ฌธ์˜ iterator๋ฅผ ์ฆ๊ฐ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ ๊ธฐ๋ณธ x,y์ขŒํ‘œ๋ฅผ ๊ธฐ์ค€
		// ์•ž์„œ๋ฐ”๋€Œ๋Š” ๊ฐ’์€ j๋ฅผ ํ†ตํ•ด ์กฐ์ž‘, ์ดํ›„ ๋А๋ฆฌ๊ฒŒ ๋ฐ”๋€Œ๋Š”๊ฐ’์€ i๋ฅผ ํ†ตํ•ด ์กฐ์ž‘
		for(int i = 0; i < N/2; i++) {
			for(int j = 0; j < N/2; j++) {
				rotated[x+i][y+j] = board[x+(N/2-1)-j][y+i];
			}
		}
	}

	static void groupMethod(int i, int j, int num) {
		if(i < 0 || j < 0 || i >= N || j >= N) return;
		if(visited[i][j] || board[i][j] != num) return;		

		visited[i][j] = true;

		for(int d = 0; d < 4; d++) {
			groupMethod(i+dxy[d][0], j+dxy[d][1], num);
		}
	}


	static void markGroup(int x, int y) {
		int cnt = 0;
		int num = board[x][y];


		for(int i=0; i<N; i++) {
			for(int j=0; j<N; j++) {
				if(visited[i][j]) cnt++;
			}
		}

		Group group = new Group(cnt, num);

		for(int i=0; i<N; i++) {
			for(int j=0; j<N; j++) {
				if(visited[i][j]) {
					marking[i][j] = group;
					visited[i][j] = false;
				}
			}
		}
	}


}

ํ’€์ด

1. ๋ฉ”์„œ๋“œ ์ •๋ฆฌ

๋ฉ”์„œ๋“œ ๋ช… ์—ญํ•  ๋น„๊ณ 
main - ์ž…๋ ฅ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ
- turn ๋ณ„ ๊ณผ์ • ์ง„ํ–‰
- simulation ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ
 
void groupDfs(int i, int j, Group base) - ์ธ์ž๋กœ ๋„˜์–ด์˜จ i, j ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ด๋‹น ์ธ๋ฑ์Šค๊ฐ€ ํฌํ•จ๋˜๋Š” ๊ทธ๋ฃน์— ๋Œ€ํ•ด ์ธ์ ‘ ๊ทธ๋ฃน์„ ์กฐ์‚ฌ
- ๋‹ค๋ฅธ ์นธ์—์„œ ์ด๋ฏธ ์กฐ์‚ฌํ–ˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ visited ์—ฌ๋ถ€ ํŒ๋ณ„ ํ›„ ์กฐ์‚ฌ ์‹œ์ž‘
- ์ธ์ž๋กœ ๋„˜์–ด์˜จ base์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์—” ๊ฐ™์€ ๊ทธ๋ฃน์ด๋ฏ€๋กœ visited ์ฒ˜๋ฆฌ ๋ฐ ์ƒํ•˜์ขŒ์šฐ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ 
- ์ธ์ž๋กœ ๋„˜์–ด์˜จ base์™€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—” ์ธ์ ‘ ํƒ€๊ทธ๋ฃน์ด๋ฏ€๋กœ HashMap ์— ์ €์žฅ -> getOrDefault ๋ฉ”์„œ๋“œ๋กœ ํ‚ค ์ถ”๊ฐ€ ๋ฐ ๊ฐ’ ๋ˆ„์ 
 
void calculateScore(int x, int y)  - ๋ฌธ์ œ์—์„œ ์ œ์‹œ๋œ ์ ์ˆ˜ ๊ณ„์‚ฐ ๋กœ์ง ๋ฐ˜์˜  
int[][] rotate() - ์‹ญ์ž๋ชจ์–‘ 90๋„ ๋ฐ˜์‹œ๊ณ„ ํšŒ์ „
- ๊ฐ ์‚ฌ๋ถ„๋ฉด 90๋„ ์‹œ๊ณ„ ํšŒ์ „
  - rotateQuarter๋ผ๋Š” ๋ณ„๋„์˜ ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€ํ•ด์„œ ์‚ฌ์šฉ
 
void rotateQuarter(int x, int y, int[][] rotated) - ๊ฐ ์‚ฌ๋ถ„๋ฉด์— ๋Œ€ํ•œ 90๋„ ์‹œ๊ณ„ ํšŒ์ „ ์ง„ํ–‰
- ์ธ์ž๋กœ ์‹œ์ž‘์  ์ขŒํ‘œ ๋ฐ rotated ๋ฐฐ์—ด์„ ๋ฐ›์•„ ์ธ๋ฑ์Šค ๊ณ„์‚ฐํ•ด์„œ ๋ฐ˜์˜
 
void groupMethod(int i, int j, int num) - 2์ฐจ์› ๋ฐฐ์—ด์„ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ๊ฐ ๋ฒˆํ˜ธ๋ณ„๋กœ ๊ทธ๋ฃนํ•‘์„ ์ง„ํ–‰ํ•˜๋Š” ๋ฉ”์„œ๋“œ 
- ํ•ด๋‹น ๋ฉ”์„œ๋“œ์—์„œ visited๋กœ ์ฒ˜๋ฆฌํ•ด๋†“์œผ๋ฉด markGroup ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด Group ๊ฐ์ฒด๋ฅผ ์ถ”๊ฐ€ํ•ด marking ๋ฐฐ์—ด์— ์ธ์Šคํ„ด์Šค ์ถ”๊ฐ€
 
void markGroup(int x, int y) - markGroup ๋ฉ”์„œ๋“œ๋Š” groupMethod์—์„œ visited์ฒ˜๋ฆฌ๋ฅผ ํ•ด๋†“์€ ์˜์—ญ๋“ค์— ๋Œ€ํ•ด์„œ cnt ๊ฐ’(๊ทธ๋ฃน์„ ์ด๋ฃจ๋Š” ์นธ์˜ ์ˆ˜) ์„ ์„ธ๊ณ , ์ดํ›„ Group ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด marking ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค.
- ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚˜๋ฉด visited ๊ฐ’์€ false๋กœ ๋Œ๋ ค๋†“๋Š”๋‹ค.
 

 

2. ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฐ˜๋ณต ๋กœ์ง ์„ค๋ช…

ํ•ด๋‹น ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์€ ์ˆœ์„œ๋กœ 4๋ฒˆ for๋ฌธ์„ ๋Œ๋ ค ํ’€์ดํ–ˆ์Šต๋‹ˆ๋‹ค.

 

1. turn ๋งˆ๋‹ค ์‚ฌ์šฉํ•  visited ๋ฐฐ์—ด ๋ฐ marking ๋ฐฐ์—ด์„ ์ดˆ๊ธฐํ™”

2. ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜จ ์ดˆ๊ธฐ ๋ฐฐ์—ด์—์„œ ์ˆซ์ž๋ณ„๋กœ groupMethod๋ฅผ ํ†ตํ•ด ๊ทธ๋ฃนํ™”๋ฅผ ์‹œํ‚ค๊ณ  ๊ฐ๊ฐ์˜ ๊ทธ๋ฃน์— ๋Œ€ํ•˜์—ฌ Group ๊ฐ์ฒด๋ฅผ ๋ฐฐ์—ด์— ์ €์žฅํ•˜๋ฉด์„œ ๋งˆํ‚น by. markGroup (์ด๋•Œ marking 2์ฐจ์› ๋ฐฐ์—ด๋‚ด ๊ฐ ๊ทธ๋ฃน๋ณ„ ์˜์—ญ์— ์ €์žฅ๋˜๋Š” Group๊ฐ์ฒด๋Š” ๋™์ผ ์ฃผ์†Œ๊ฐ’์„ ๊ณต์œ  = ๊ฐ™์€ ๊ฐ์ฒด -> ์–•์€๋ณต์‚ฌ)

3. ์ดํ›„ visited ๋ฐฐ์—ด์„ ๋‹ค์‹œ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ๊ฐ ๊ทธ๋ฃน์„ ๋Œ๋ฉด์„œ ์ธ์ ‘ํ•œ ๋ณ€์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•จ.

  3.1. dfs๋ฅผ ํ†ตํ•ด ํƒ์ƒ‰ํ•˜๋ฉด์„œ ํ•ด๋‹น ๊ทธ๋ฃน์—์„œ ๋ฐฉ๋ฌธํ•œ ๊ณณ์€ visited ์ฒ˜๋ฆฌ -> ๋ฐฉ๋ฌธํ•œ ์ˆœ๊ฐ„ ์ธ์ ‘ํ•œ ์นธ๋“ค์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ๊ทธ๋ฃน์ธ์ง€๋ฅผ ์ฒดํฌํ•˜๊ณ  ํ•ด๋‹น ๊ทธ๋ฃน์„ key ๊ฐ’์œผ๋กœ ๊ฐ€์ง€๋Š” HashMap<Group, Integer> groupAdjCnt ์— ์ˆซ์ž๋ฅผ ์ €์žฅ 

  3.2. ์ดํ›„ ํ•ด๋‹น ํ•ด์‰ฌ๋งต์— ์ €์žฅ๋œ ๊ฐ’๋“ค์„ ์ด์šฉํ•ด base ๊ทธ๋ฃน์— ๋Œ€ํ•ด ์ธ์ ‘ํ•œ score๋ฅผ ๊ฒ€์‚ฌ. 

  (**์ฐธ๊ณ ) ๋‹จ, visited ์ฒ˜๋ฆฌ๋Š” base ๊ทธ๋ฃน์— ๋Œ€ํ•ด์„œ๋งŒ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ๋‹ค๋ฅธ ๊ทธ๋ฃน์—์„œ๋Š” ์•ž์„œ ์ธ์ ‘ ๊ทธ๋ฃน์„ ์ฒดํฌํ•œ group์— ๋Œ€ํ•ด์„œ๋Š” ์ ์ˆ˜๋ฅผ ์„ธ์ง€ ์•Š์•„๋„ ๋˜๋ฏ€๋กœ -> ๋ฐฐ์—ด์„ ์ฐจ๊ทผ์ฐจ๊ทผ ์ฝ์œผ๋ฉฐ ๊ฑธ๋ฆฌ๋Š” group์— ๋Œ€ํ•ด์„œ ์ธ์ ‘๋ฐฐ์—ด์„ ์ฒดํฌํ•˜๋Š”๋Œ€์‹  ์ดํ›„์—๋Š” ๋‹ค์‹œ ์ฒดํฌํ•˜์ง€ ์•Š๋„๋ก ํ•จ.

4. ์ดํ›„ turn์„ ๋„˜๊ธฐ๊ธฐ์ „ board ์— ๋Œ€ํ•ด ๊ฐ€์šด๋ฐ์„  ๋ฐ˜์‹œ๊ณ„ํšŒ์ „, ๊ฐ ์‚ฌ๋ถ„๋ฉด ์‹œ๊ณ„๋ฐฉํ–ฅ 90๋„ ํšŒ์ „์„ ์ ์šฉ(by. rotate())

 

3. ์ฃผ์š” ๋ฉ”์„œ๋“œ ์ฝ”๋“œ ์„ค๋ช…

3.1. groupDfs

	static void groupDfs(int i, int j, Group base) {
		if(i < 0 || j < 0 || i >= N || j >= N || visited[i][j]) return;

		if(marking[i][j] == base) {
			visited[i][j] = true; // ํ˜„์žฌ ํƒ์ƒ‰์ค‘์ธ ๊ทธ๋ฃน์— ๋Œ€ํ•ด์„œ๋งŒ -> ํ•ด๋‹น ๊ทธ๋ฃน์— ๋Œ€ํ•œ ๊ณ„์‚ฐ์€ ์ด๋ฒˆ์— ๋๋ƒ„. 4๋ฐฉํ–ฅ ํƒ์ƒ‰ํ›„
			
			for(int d = 0; d < 4; d++) {
				groupDfs(i+dxy[d][0], j+dxy[d][1], base);
			}
		}
		else {
			groupAdjCnt.put(marking[i][j], groupAdjCnt.getOrDefault(marking[i][j], 0) + 1);
			return;
		}
	}

 

- main ๋ฉ”์„œ๋“œ์—์„œ 2์ค‘ for๋ฌธ์„ ๋Œ๋ฉฐ board์˜ ์ „์ฒด ๋ฐฐ์—ด์„ ํƒ์ƒ‰์‹œํ‚จ๋‹ค. 

  - ํƒ์ƒ‰ํ•˜๋ฉด์„œ ํ•ด๋‹น ์˜์—ญ์ด visited ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์—ˆ๋Š”์ง€ ํŒ๋ณ„ํ•˜๊ณ  ์ดํ›„ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๊ฒ€์‚ฌํ•˜์ง€ ์•Š์€ ๊ทธ๋ฃน์œผ๋กœ ๋ถ„๋ฅ˜ํ•ด ํ•ด๋‹น ์˜์—ญ์„ ๊ฒ€์‚ฌํ•œ๋‹ค.

  - groupDfs ๋ฉ”์„œ๋“œ๋Š” ๊ทธ๋Ÿฐ ์ƒํ™ฉ์—์„œ ์ธ์ž๋กœ ๋“ค์–ด์˜จ ์ขŒํ‘œ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ์›์†Œ์— ๋Œ€ํ•ด ๊ทธ๋ฃนํ™” ์‹œ์ผœ ํ•ด๋‹น ๊ทธ๋ฃน์ด ๊ฐ™์€ ๊ทธ๋ฃน์ธ์ง€ ํŒ๋ณ„ํ•˜๊ณ  ์ดํ›„ ๋‹ค๋ฅธ ๊ทธ๋ฃน์— ๋Œ€ํ•ด์„œ๋Š” ์ธ์ ‘ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•ด์„œ groupAdjCnt (HashMap<Group, Integer>) ์— ๊ฐ’์„ ์˜ฌ๋ฆฐ๋‹ค. 

  - ์ด๋•Œ Group์„ key๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ base ๊ทธ๋ฃน์— ๋Œ€ํ•ด ์ธ์ ‘ํ•œ Group์˜ ๋ณ€์˜ ๊ฐ’์ด ์ €์žฅ๋˜๊ฒŒ ๋œ๋‹ค. 

  - ์ด๋ฅผ ์œ„ํ•ด 2์ฐจ์› Group ํƒ€์ž… ๋ฐฐ์—ด marking์„ ์„ ์–ธํ•ด๋‘์—ˆ๊ณ  ํ•ด๋‹น ์ขŒํ‘œ์— ์žˆ๋Š” Group๊ฐ์ฒด๋ฅผ marking ๋ฐฐ์—ด๋กœ ๋ถ€ํ„ฐ ์–ป์–ด์™€ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค.

- getOrDefault ๋ฉ”์„œ๋“œ๋„ ์˜ค๋žœ๋งŒ์— ์‚ฌ์šฉํ•ด๋ดค๋Š”๋ฐ ๋„ˆ๋ฌด ์˜ค๋žœ๋งŒ์— ์‚ฌ์šฉํ•ด์„œ ๊ฑฐ์˜ ์ฒ˜์Œ๋ณธ ๋ฉ”์„œ๋“œ์ธ ๋А๋‚Œ์ด๋‹ค. 

  - ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ key๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ ์ดˆ๊ธฐ๊ฐ’์„ ์ž…๋ ฅํ•œ๋‹ค.

  - ๋งŒ์ผ ํ•ด๋‹นํ•˜๋Š” ํ‚ค๊ฐ’์ด ์žˆ๋‹ค๋ฉด value๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ์—†๋‹ค๋ฉด ๋‘๋ฒˆ์งธ์ธ์ž์ธ 0์„ ๊ฐ€์ ธ์˜ค๊ฒŒ๋œ๋‹ค. 

  - ํ•ด๋‹น ์‚ฌ์šฉ๋ฒ•์„ ์ž˜ ์ˆ™์ง€ํ•˜๊ณ  ์—ฌ๋Ÿฌ๋ชจ๋กœ ์ž˜ ์‚ฌ์šฉํ•  ๊ฒƒ ๊ฐ™์€ ๋ฉ”์„œ๋“œ์ด๋‹ค.

 

3.2. rotateQuarter

	static void rotateQuarter(int x, int y, int[][] rotated){
		// ๋ฐ˜๋ณต๋ฌธ์˜ iterator๋ฅผ ์ฆ๊ฐ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ ๊ธฐ๋ณธ x,y์ขŒํ‘œ๋ฅผ ๊ธฐ์ค€
		// ์•ž์„œ๋ฐ”๋€Œ๋Š” ๊ฐ’์€ j๋ฅผ ํ†ตํ•ด ์กฐ์ž‘, ์ดํ›„ ๋А๋ฆฌ๊ฒŒ ๋ฐ”๋€Œ๋Š”๊ฐ’์€ i๋ฅผ ํ†ตํ•ด ์กฐ์ž‘
		for(int i = 0; i < N/2; i++) {
			for(int j = 0; j < N/2; j++) {
				rotated[x+i][y+j] = board[x+(N/2-1)-j][y+i];
			}
		}
	}

- ๊ฐ ์‚ฌ๋ถ„๋ฉด(?) ์ด๋ผ๊ณ  ํ‘œํ˜„ํ•˜๋Š”๊ฒŒ ๋งž๋Š”์ง€ ๋ชจ๋ฅด๋‚˜ ์ƒ๊ธด๊ฑด ์‚ฌ๋ถ„๋ฉด์ด๋‹ค. ํ•ด๋‹น ์˜์—ญ๋“ค์— ๋Œ€ํ•ด์„œ ์‹œ๊ณ„๋ฐฉํ–ฅ 90๋„ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค.

- ํ•ด๋‹น ์ธ๋ฑ์‹ฑ์„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐœ์˜ for๋ฌธ์˜ ์‹œ์ž‘์ด ์ธ์ž๋กœ๋“ค์–ด์˜จ x, y ๊ฐ€ ์•„๋‹ˆ๊ณ  , ์‹œ์ž‘์ (์ขŒ์ธก ์ตœ์ƒ๋‹จ ์ขŒํ‘œ)์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ’์„ ์ฆ๊ฐ์‹œํ‚ค๋Š” ์—ญํ• ๋กœ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํšŒ์ „ ๋กœ์ง์ด ์‰ฝ๊ฒŒ ๋А๊ปด์ง„๋‹ค.

'๐Ÿ’ฏ CodingTest > CodeTree' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[CodeTree] ๋‚˜๋ฌด๋ฐ•๋ฉธ(์‚ผ์„ฑ SW ์—ญ๋Ÿ‰ํ…Œ์ŠคํŠธ 2022 ์ƒ๋ฐ˜๊ธฐ ์˜คํ›„ 2๋ฒˆ ๋ฌธ์ œ)  (6) 2024.10.10
[Code Tree] ์ˆ ๋ž˜์žก๊ธฐ(์‚ผ์„ฑ SW ์—ญ๋Ÿ‰ํ…Œ์ŠคํŠธ 2022 ์ƒ๋ฐ˜๊ธฐ ์˜ค์ „ 1๋ฒˆ ๋ฌธ์ œ)  (1) 2024.09.12
[Code Tree] ์ •์œก๋ฉด์ฒด ๊ตด๋ฆฌ๊ธฐ (์‚ผ์„ฑ SW ์—ญ๋Ÿ‰ํ…Œ์ŠคํŠธ 2016 ํ•˜๋ฐ˜๊ธฐ 1๋ฒˆ)  (0) 2024.09.02
'๐Ÿ’ฏ CodingTest/CodeTree' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [CodeTree] ๋‚˜๋ฌด๋ฐ•๋ฉธ(์‚ผ์„ฑ SW ์—ญ๋Ÿ‰ํ…Œ์ŠคํŠธ 2022 ์ƒ๋ฐ˜๊ธฐ ์˜คํ›„ 2๋ฒˆ ๋ฌธ์ œ)
  • [Code Tree] ์ˆ ๋ž˜์žก๊ธฐ(์‚ผ์„ฑ SW ์—ญ๋Ÿ‰ํ…Œ์ŠคํŠธ 2022 ์ƒ๋ฐ˜๊ธฐ ์˜ค์ „ 1๋ฒˆ ๋ฌธ์ œ)
  • [Code Tree] ์ •์œก๋ฉด์ฒด ๊ตด๋ฆฌ๊ธฐ (์‚ผ์„ฑ SW ์—ญ๋Ÿ‰ํ…Œ์ŠคํŠธ 2016 ํ•˜๋ฐ˜๊ธฐ 1๋ฒˆ)
S.Honey
S.Honey
  • S.Honey
    Algo ์“ฐ์ž
    S.Honey
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (123)
      • ํšŒ๊ณ  (0)
        • ์ทจ์—… ํ›„ ํšŒ๊ณ  (0)
      • ๐Ÿƒ Frontend Road-Map (2)
        • ๐Ÿšฉ Summary (1)
        • ๐Ÿ“š Road-Map Contents (1)
        • ๐ŸŸง HTML (0)
        • ๐ŸŸฆ CSS (0)
        • ๐ŸŸจ Javascript (0)
        • โฌœ React (0)
        • ๐ŸŸช Redux (0)
      • Backend (0)
        • QueryDSL (0)
      • ๐Ÿ’ป Programming Language (54)
        • C# (51)
        • Flutter-Dart (3)
        • Java (0)
      • ๐Ÿ“š Computer Science (4)
        • Algorithms (4)
        • Database (0)
        • Network (0)
        • Operating System(OS) (0)
      • ๐Ÿ’ฏ CodingTest (60)
        • BaekJoon (22)
        • Programmers (34)
        • CodeTree (4)
      • โœ’๏ธ Design Pattern (1)
      • ๐Ÿฑ Etc (2)
        • Jenkins Plugin ์ œ์ž‘๊ธฐ (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ๋งํฌ

    • ๊ณต์ง€์‚ฌํ•ญ

      • ๐Ÿ“– ๊ณต๋ถ€ ์ฐธ๊ณ  ๊ต์žฌ ๋ฐ ์ž๋ฃŒ
    • ์ธ๊ธฐ ๊ธ€

    • ํƒœ๊ทธ

      programmers
      DART
      ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰
      Algorithm
      BAEKJOON
      ์ฝ”๋“œํŠธ๋ฆฌ
      BFS
      ๋ฌธ์ž์—ด ํŒŒ์‹ฑ
      JavaScript
      ์“ฐ์…จ์ž–์•„
      ์ž๋ฃŒ๊ตฌ์กฐ
      ํŒŒ์ด์ฌ
      JS
      ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
      ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
      ์ด์ง„ํƒ์ƒ‰
      ์นด์นด์˜ค
      c#
      ์‹œ๋ฎฌ๋ ˆ์ด์…˜
      DP
      ์‚ผ์„ฑsw์—ญํ…Œ
      ์Šคํ„ฐ๋””
      ๋ฐฑ์ค€
      ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
      sort
      ๊ตฌํ˜„
      ์•Œ๊ณ ๋ฆฌ์ฆ˜
      Java
      Flutter
    • ์ตœ๊ทผ ๋Œ“๊ธ€

    • ์ตœ๊ทผ ๊ธ€

    • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.1
    S.Honey
    [CodeTree] ์˜ˆ์ˆ ์„ฑ(์‚ผ์„ฑ SW ์—ญ๋Ÿ‰ํ…Œ์ŠคํŠธ 2022 ์ƒ๋ฐ˜๊ธฐ ์˜ค์ „ 2๋ฒˆ ๋ฌธ์ œ)
    ์ƒ๋‹จ์œผ๋กœ

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”