https://programmers.co.kr/learn/courses/30/lessons/1836
λ¬Έμ
μΈμ λ λ§μλ μμλ€μ΄ κ°λν ννλ‘μ΄ νΈλ νμ΄. νΈλ νμ΄μμ ν볡νκ² μ¬λ 리ν νλ μ¦λ€μ λ§μμ μλ λ§€μ§ μ€νΌμ 보물μ²λΌ 보κ΄νκ³ μλ€. λ§€μ§ μ€νΌμ μ¬λ£λ§ μ€λΉν΄μ λλΉμ λ£κ³ νμ κΈ°λ§ νλ©΄ μμκ°μ μ΅κ³ μ μλ¦¬λ‘ λ§λ€μ΄μ£Όλ μ λΉμ μμ΄ν . μ΄λ λ λ§€μ§ μ€νΌμ νΈμνν λ Έλ¦¬λ μ λΉλ€μ΄ 보물μ νμ³κ°λ€. λ§€μ§ μ€νΌμ λμ°Ύκ³ λ€μ λ§μμ ννλ₯Ό κ°μ Έμ€κΈ° μν΄ νλ μ¦μ λλͺ¨νμ΄ μμλλλ°...
리ν νλ μ¦ μ¬μ²μ±μ νλ μ¦ μ¬μ²μ±κ³Ό μ μ¬ν κ²μμ΄λ€. κ²μμ 2μ°¨μ λ°°μ΄μμ μ§νλλλ°, μ¬λ¬ κ°μ§ 무λ¬λ‘ ꡬμ±λ νμΌμ΄ λ°°μΉλμ΄ μμΌλ©° κ°μ λͺ¨μμ νμΌμ λ κ°μ© λ°°μΉλμ΄ μλ€. κ²μμ λͺ©μ μ λ°°μΉλ λͺ¨λ νμΌμ μ κ±°νλ κ²μΌλ‘, κ°μ λͺ¨μμ νμΌμ κ·μΉμ λ°λΌ μ κ±°νλ©΄ λλ€. νμΌμ μ κ±°ν μ μλ κ²½μ°λ λ€μκ³Ό κ°λ€.
λ€μ 쑰건μ λ§μ‘±νλ κ²½λ‘κ° μμ λ λ νμΌμ μ κ±°ν μ μλ€.
- κ²½λ‘μ μ λμ μ κ±°νλ €λ λ νμΌμ΄λ€.
- κ²½λ‘λ λ κ° μ΄νμ μν/μμ§ μ λΆμΌλ‘ ꡬμ±λμ΄ μκ³ , μ΄λ€μ λͺ¨λ μ°κ²°λμ΄ μλ€. (μ¦, κ²½λ‘λ₯Ό ν λ² μ΄νλ‘ κΊΎμ μ μλ€)
- μ°Έκ³ : νλ μ¦ μ¬μ²μ±μ κ²½λ‘κ° μΈ κ° μ΄νμ μ λΆμΌλ‘ ꡬμ±λμ΄μΌ νλ€λ μ μ΄ λ€λ₯΄λ€. (μ¦, κ²½λ‘λ₯Ό λ λ² μ΄νλ‘ κΊΎμ μ μλ€)
- κ²½λ‘ μμλ λ€λ₯Έ νμΌ λλ μ₯μ λ¬Όμ΄ μμ΄μΌ νλ€.
μμ λ°°μ΄μμ μ΄νΌμΉ νμΌμ μ§μ μ κ²½λ‘λ‘ μ΄μ μ μμΌλ―λ‘ μ κ±° κ°λ₯νλ€. λΌμ΄μΈ νμΌ μμ ν λ² κΊΎμΈ κ²½λ‘λ‘ μ°κ²°λλ―λ‘ μ κ±° κ°λ₯νλ€. λ¬΄μ§ νμΌμ κ²½μ° λ€λ₯Έ νμΌμ μ§λμ§ μλ κ²½λ‘λ λ λ² κΊΎμ¬μΌ νλ―λ‘ μ κ±°ν μ μλ νμΌμ΄λ©°, νλΈ νμΌ μμ μ§μ μ κ²½λ‘ μ¬μ΄μ μ₯μ λ¬Όμ΄ μμΌλ―λ‘ μ κ±° κ°λ₯νμ§ μλ€.
νμΌ λ°°μ΄μ΄ μ£Όμ΄μ‘μ λ, κ·μΉμ λ°λΌ νμΌμ λͺ¨λ μ κ±°ν μ μλμ§, κ·Έ κ²½μ° μ΄λ€ μμλ‘ νμΌμ μ κ±°νλ©΄ λλμ§ κ΅¬νλ νλ‘κ·Έλ¨μ μμ±ν΄λ³΄μ.
μ λ ₯
μ λ ₯μ κ²μνμ ν¬κΈ°λ₯Ό λνλ΄λ mκ³Ό n, κ·Έλ¦¬κ³ λ°°μΉλ νμΌμ μ 보λ₯Ό λ΄μ λ¬Έμμ΄ λ°°μ΄ boardλ‘ μ£Όμ΄μ§λ€. μ΄ λ°°μ΄μ ν¬κΈ°λ mμ΄λ©°, κ°κ°μ μμλ nκΈμμ λ¬Έμμ΄λ‘ ꡬμ±λμ΄ μλ€. μ λ ₯λλ κ°μ μ ν쑰건μ λ€μκ³Ό κ°λ€.
- 1 <= m, n <= 100
- boardμ μμλ μλ λμ΄λ λ¬Έμλ‘ κ΅¬μ±λ λ¬Έμμ΄μ΄λ€. κ° λ¬Έμμ μλ―Έλ λ€μκ³Ό κ°λ€.
- .: λΉμΉΈμ λνλΈλ€.
- *: λ§ν μΉΈμ λνλΈλ€.
- μνλ²³ λλ¬Έμ(A-Z): νμΌμ λνλΈλ€. μ΄ λ¬Έμ μμ, κ°μ κΈμλ‘ μ΄λ£¨μ΄μ§ νμΌμ ν ν μ€νΈ μΌμ΄μ€μ νμ λ κ°μ©λ§ μ‘΄μ¬νλ€.
- boardμλ μνλ²³ λλ¬Έμκ° νμ μ‘΄μ¬νλ€. μ¦, νμΌμ΄ μλ μ λ ₯μ μ£Όμ΄μ§μ§ μλλ€.
μΆλ ₯
ν΄κ° μ‘΄μ¬νλ κ²½μ° νμΌμ μ κ±°νλ μμλλ‘ ν κΈμμ© μ΄λ£¨μ΄μ§ λ¬Έμμ΄μ, κ·Έλ μ§ μμ κ²½μ° IMPOSSIBLEμ 리ν΄νλ€. ν΄κ° μ¬λ¬ κ°μ§μΈ κ²½μ°, μνλ²³ μμΌλ‘ κ°μ₯ λ¨Όμ μΈ λ¬Έμμ΄μ 리ν΄νλ€.
νμ΄
μ΄ λ¬Έμ λ ꡬνλ¬Έμ μ΄λ€.. μ μΌ νλ€κ³ 볡μ‘.. 머리μγ ..γ γ γ γ γ
- String[] board β‘οΈ char[][] boardChar λ³ν
- ' * ' λ ' . ' κ° μλ νμΌλ€μ tileListμ μ μ₯ βΌοΈ tileListλ μνλ²³ μ€λ¦μ°¨μ, μΌμͺ½, μμͺ½ μμΌλ‘ μ λ ¬
- λ°λ³΅λ¬ΈμΌλ‘ μ κ±°κ° κ°λ₯νμ§ νμΈ
- μμ κ° κ°λ₯νλ©΄ ' . ' λ‘ λ°κΏμ£Όκ³ , answerμ μΆκ°, μμΌλ‘ λμκ° λ€μ νμΌ κ²μ¬
- λΆκ°λ₯νλ©΄ λ€μ νμΌλ‘ λμ΄κ°λ€.
νμΌ μ κ±°κ° κ°λ₯ν κ²½μ°λ
- κ°μ ν λλ μ΄μ μλ κ²½μ° β‘οΈ κ²μ¬κ° κ°λ¨, μ¬μ΄κ° λͺ¨λ ' . ' μΈμ§ ν
- μΌμͺ½μ μλ νμΌμ΄ μμͺ½, μ€λ₯Έμͺ½μ μλ νμΌμ΄ μλμͺ½
- μΌμͺ½μ μλ νμΌμ΄ μλμͺ½, μ€λ₯Έμͺ½μ μλ νμΌμ΄ μμͺ½
μ½λ
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class 리ννλ μ¦μ¬μ²μ± {
static class tile implements Comparable<tile>{
int c;
int x;
int y;
tile(int c, int x, int y){
this.c = c;
this.x = x;
this.y = y;
}
@Override
public int compareTo(tile o) {
// μνλ²³ μμ μμΌλ‘ μ λ ¬
int result = this.c - o.c;
// μνλ²³μ΄ κ°μΌλ©΄ μΌμͺ½μ μλ νμΌ λ¨Όμ μ λ ¬
if(result == 0){
result = this.y - o.y;
if(result == 0){
result = this.x - o.x;
}
}
return result;
}
}
static List<tile> tileList;
static char[][] boardChar;
static String answer;
public static String solution(int m, int n, String[] board) {
answer = "";
tileList = new ArrayList<>();
boardChar = new char[m][n];
for(int i = 0; i < board.length ; i++){
boardChar[i] = board[i].toCharArray();
}
for(int i = 0 ; i < m ; i++){
for(int j = 0 ; j < n ; j++){
char c = boardChar[i][j];
if('A' <= c && c <= 'Z'){
tileList.add(new tile(c, i, j));
}
}
}
Collections.sort(tileList);
for(int i = 0 ; i < tileList.size() ; i+=2){
tile t1 = tileList.get(i);
tile t2 = tileList.get(i+1);
if(canRemove(t1, t2)){
answer += (char)t1.c;
tileList.remove(t1);
tileList.remove(t2);
boardChar[t1.x][t1.y] = '.';
boardChar[t2.x][t2.y] = '.';
i = -2;
}
}
if(tileList.size() == 0)
return answer;
return "IMPOSSIBLE";
}
private static boolean canRemove(tile t1, tile t2) {
// λ νμΌμ yμ’νκ° κ°μ§ μμ μ΄μ, t1μ΄ μΌμͺ½
// yμ’νκ° κ°λ€λ©΄ t1μ΄ μμͺ½
if(t1.x == t2.x){
// μ¬μ΄μ μ₯μ λ¬Όμ΄ μλκ°
for(int i = t1.y+1; i < t2.y ; i++){
if(boardChar[t1.x][i] != '.')
return false;
}
return true;
}
else if(t1.y == t2.y){
// μ₯μ λ¬Ό μ¬λΆ
for(int i = t1.x+1; i < t2.x; i++){
if(boardChar[i][t1.y] != '.')
return false;
}
return true;
}
else{
// μ’μμ°ν OR μ’νμ°μ
boolean flag1 = true, flag2 = true;
// μ’μμ°ν
if(t1.x < t2.x){
// μμͺ½μΌλ‘ λμκ°λ κ²½μ°
for(int i = t1.y + 1; i < t2.y ; i++){
if(boardChar[t1.x][i] != '.'){
flag1 = false;
break;
}
}
for(int i = t1.x ; i < t2.x ; i++){
if(!flag1)
break;
if(boardChar[i][t2.y] != '.'){
flag1 = false;
break;
}
}
// λ°μΌλ‘ λμκ°λ κ²½μ°
for(int i = t1.x+1 ; i <= t2.x ; i++){
if(boardChar[i][t1.y] != '.'){
flag2 = false;
break;
}
}
for(int i = t1.y ; i < t2.y ; i++){
if(!flag2)
break;
if(boardChar[t2.x][i] != '.'){
flag2 = false;
break;
}
}
}
// μ’νμ°μ
else{
// μμͺ½μΌλ‘ λμκ°λ κ²½μ°
for(int i = t1.x-1 ; i >= t2.x; i--){
if(boardChar[i][t1.y] != '.'){
flag1 = false;
break;
}
}
for(int i = t1.y; i < t2.y ; i++){
if(!flag1)
break;
if(boardChar[t2.x][i] != '.'){
flag1 = false;
break;
}
}
// λ°μͺ½μΌλ‘ λμκ°λ κ²½μ°
for(int i = t1.y+1 ; i <= t2.y ; i++){
if(boardChar[t1.x][i] != '.'){
flag2 = false;
break;
}
}
for(int i = t1.x ; i > t2.x ; i--){
if(!flag2)
break;
if(boardChar[i][t2.y] != '.'){
flag2 = false;
break;
}
}
}
if(flag1 || flag2)
return true;
return false;
}
}
public static void main(String[] args) {
String[] board = {".ZI.", "M.**", "MZU.", ".IU."};
System.out.println(solution(4, 4, board));
}
}
'μκ³ λ¦¬μ¦ > νλ‘κ·Έλλ¨Έμ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[ νλ‘κ·Έλλ¨Έμ€ / Programmers Level 3 ] λ€λ¨κ³ μΉ«μ ν맀 (0) | 2021.09.20 |
---|---|
[ νλ‘κ·Έλλ¨Έμ€ / Programmers Level 3 ] μμ (0) | 2021.09.16 |
[ νλ‘κ·Έλλ¨Έμ€ / Programmers Level 3 ] λ€νΈμν¬ (0) | 2021.09.15 |
[ νλ‘κ·Έλλ¨Έμ€ / Programmers Level 3] μ μ μΌκ°ν (0) | 2021.09.15 |
[ νλ‘κ·Έλλ¨Έμ€ / Programmers Level 3 ] λμ€ν¬ 컨νΈλ‘€λ¬ (0) | 2021.09.15 |