728x90
코딩 테스트 풀이 체크리스트 |
|
2시간 내에 풀었는가? | X |
본인의 실력으로 풀었는가? | O |
코딩테스트 연습 - 리틀 프렌즈 사천성
리틀 프렌즈 사천성 언제나 맛있는 음식들이 가득한 평화로운 푸드 타운. 푸드 타운에서 행복하게 사는 리틀 프렌즈들은 마을에 있는 매직 스푼을 보물처럼 보관하고 있다. 매직 스푼은 재료만
programmers.co.kr
import java.util.*;
class Solution {
char[][] table;
HashMap<Character, MatchCard> list;
public String solution(int m, int n, String[] board) {
String answer = "";
table = new char[m][n];
list = new HashMap<>();
for (int i = 0; i < board.length; i++) {
table[i] = board[i].toCharArray();
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (table[i][j] == '.' || table[i][j] == '*') continue;
if (list.get(table[i][j]) != null) continue;
for (int a = 0; a < m; a++) {
for (int b = 0; b < n; b++) {
if (i == a && j == b) continue;
if (table[i][j] == table[a][b]){
list.put(table[i][j], new MatchCard(i, j, a, b));
}
}
}
}
}
ArrayList<Character> arr = new ArrayList<>();
while (list.size() > 0) {
arr = new ArrayList<>();
for (int i = 0; i < m; i++) {
}
for (char key : list.keySet()) {
MatchCard card = list.get(key);
boolean value = rootCheck(card.x1, card.y1, card.x2, card.y2);
if (value) {
arr.add(key);
}
}
if (arr.size() == 0) return "IMPOSSIBLE";
Collections.sort(arr);
char key = arr.get(0);
MatchCard c = list.get(key);
table[c.x1][c.y1] = '.';
table[c.x2][c.y2] = '.';
list.remove(key);
answer += key;
}
return answer;
}
public boolean rootCheck(int x1, int y1, int x2, int y2) {
if (x1 == x2) {
if (holCheck(y1, y2, x1)) {return true;} else {return false;}
}
if (y1 == y2) {
if (verCheck(x1, x2, y1)) {return true;} else {return false;}
}
if (verCheck(x1, x2, y1)) {
boolean value = false;
if (x1 < x2) {
value = holCheck(y1, y2, x2) && cornerCheck(x2, y1);
} else {
value = holCheck(y1, y2, x1) && cornerCheck(x1, y1);
}
if (value) return true;
}
if (verCheck(x1, x2, y2)) {
boolean value = false;
if (x1 < x2) {
value = holCheck(y1, y2, x1) && cornerCheck(x1, y2);
} else {
value = holCheck(y1, y2, x2) && cornerCheck(x2, y2);
}
if (value) return true;
}
return false;
}
public boolean cornerCheck(int x, int y) {
if (table[x][y] == '.') return true;
return false;
}
public boolean verCheck(int x1, int x2, int col) {
if (x1 == x2) return true;
if (x1 < x2) {
for (int i = x1 + 1; i < x2; i++) {
if (table[i][col] != '.') return false;
}
} else {
for (int i = x1 - 1; i > x2; i--) {
if (table[i][col] != '.') return false;
}
}
return true;
}
public boolean holCheck(int y1, int y2, int row) {
if (y1 == y2) return true;
if (y1 < y2) {
for (int i = y1 + 1; i < y2; i++) {
if (table[row][i] != '.') return false;
}
} else {
for (int i = y1 - 1; i > y2; i--) {
if (table[row][i] != '.') return false;
}
}
return true;
}
}
class MatchCard {
int x1, x2, y1, y2;
public MatchCard(int x1, int y1, int x2, int y2) {
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
}
}
테스트 1 〉 | 통과 (118.76ms, 112MB) |
728x90
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 - 프린터 (2단계) (0) | 2022.05.12 |
---|---|
[Java] 프로그래머스 - 전화번호 목록 (2단계) (0) | 2022.05.11 |
[Java] 프로그래머스 - 튜플 (2단계) (0) | 2022.05.03 |
[Java] 프로그래머스 - 수식 최대화 (2단계) (0) | 2022.05.02 |
[Java] 프로그래머스 - 거리두기 확인하기 (2단계) (0) | 2022.04.29 |