[프로그래머스] N-Queen (JAVA)

2024. 12. 9. 17:41·코테/Algorithm
728x90
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

풀이

 

1. 아이디어

  • 2차원배열을 1차원으로 축소해서 배열의 인덱스 = x좌표, 배열의 값 = y 좌표로 만들었다.
  • 대각선에 위치해있으면 안된다. 즉, A퀸과 B퀸의 기울기의 절댓값이 1이면 안됨.
    • 기울기 구하는 공식 = (X2 - X1) / (Y2 - Y1)
  • 즉, |X2 - X1| == |Y2 - Y1| 일 경우 대각선에 위치한 경우
  • 0~n의 위치에 배치한 뒤에, 이전까지 배치한 퀸들과 비교해주면서 놓을 수 있는지 확인

2. 백트래킹

 

백트래킹은 해를 끝까지 구하기 전에, 불가능 할 경우 부모 노드로 돌아가서 다시 해를 구하는 방법이다.

가지치기라고 이해하면 편하다.

 

3. 1차원으로 축소한 이유

처음에는 2차원으로 진행하려고 했는데, 힌트를 보고 1차원으로 구현했다.

1차원으로 축소해도 되는 이유 중 하나는, 퀸은 가로·세로·대각선으로 다 갈 수 있기 때문에 한 열에 하나의 퀸만이 위치할 수 있기 때문이다. (그래서 x좌표를 인덱스로 사용하는 이유)

 

전체코드
import java.io.*;
import java.util.*;

//2차원을 1차원으로 축소해서 해결할 것!
class Solution {
    static int map[];
    static int count;
    public int solution(int n) {
        map = new int[n];
        Col(0, n);
        
        return count;
    }
    static boolean Valid(int x){
        for(int i=0; i < x; i++){
            if(map[x] == map[i]){
                return false;
            }
            if(Math.abs(x-i) == Math.abs(map[x] - map[i])){
                return false;
            }
        }
        return true;
    }
    static void Col(int depth, int n){
        if(depth == n){
            count++;
            return;
        }
        for(int i=0; i<n; i++){
            map[depth] = i;
            if(Valid(depth)){
                Col(depth+1, n);
            }
        }
    }
}
728x90

'코테 > Algorithm' 카테고리의 다른 글

[프로그래머스] 정수 내림차순으로 배열하기 (JAVA)  (2) 2024.12.16
[프로그래머스] n^2 배열 자르기 (JAVA)  (0) 2024.12.11
[프로그래머스] 배달 (JAVA)  (0) 2024.12.04
[프로그래머스] 네트워크 (JAVA)  (0) 2024.11.28
[프로그래머스] 타겟 넘버 (JAVA)  (1) 2024.11.27
'코테/Algorithm' 카테고리의 다른 글
  • [프로그래머스] 정수 내림차순으로 배열하기 (JAVA)
  • [프로그래머스] n^2 배열 자르기 (JAVA)
  • [프로그래머스] 배달 (JAVA)
  • [프로그래머스] 네트워크 (JAVA)
DROPDEW
DROPDEW
💻 Developer | 기록하지 않으면 존재하지 않는다
  • DROPDEW
    제 2장 1막
    DROPDEW
  • 전체
    오늘
    어제
    • Dev (410) N
      • App·Android (1)
      • BE (42) N
        • HTTP 웹 기본 지식 (8)
        • 스프링 입문 - 코드로 배우는 스프링 부트, 웹 .. (12)
        • 스프링부트와 JPA 활용 (9) N
        • 스프링부트 시큐리티 & JWT (0)
        • PHP (6)
      • FE·Client (23)
        • HTML (1)
        • React (19)
        • Unity (1)
      • Data (12)
        • AI (4)
        • Bigdata (6)
        • Database (1)
        • 빅데이터분석기사 (0)
      • Infra (0)
      • Activity (0)
        • Education (0)
        • Intern (0)
        • 리모트 인턴십 6기 (0)
        • 구름톤 유니브 4기 (0)
        • SW교육기부단 15기 (0)
      • CS (8) N
      • 취준 (13)
        • 자격증 (4)
        • 인적성·NCS (6)
        • 코테·필기·면접 후기 (3)
      • 코테 (270)
        • Algorithm (222)
        • SQL (35)
        • 정리 (13)
      • 인사이트 (27)
        • 회고 (0)
        • 금융경제뉴스 (7)
        • 금융용어·지식 (2)
        • 북마크 (7)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    구현
    이분탐색
    그리디알고리즘
    브루트포스 알고리즘
    정렬
    오블완
    시뮬레이션
    다이나믹프로그래밍
    투포인터
    자료구조
    최단경로
    누적합
    수학
    그래프이론
    매개변수탐색
    너비우선탐색
    그래프탐색
    티스토리챌린지
    백준
    문자열
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
DROPDEW
[프로그래머스] N-Queen (JAVA)
상단으로

티스토리툴바