연권
달콘박스
연권
전체 방문자
오늘
어제
  • 전체 (308)
    • Web (22)
      • JavaScript (8)
      • TypeScript (2)
      • Node.js (8)
      • HTML (0)
      • CSS (0)
      • Network (1)
      • Browser (0)
      • Patterns (3)
    • Framwork (4)
      • Vue.js (3)
      • Electron (1)
    • Infra&DevOps (1)
    • Algorithm (246)
    • Database (16)
    • Review (15)
    • Test (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 정렬
  • 진법
  • java
  • typescript
  • 백준
  • javascript
  • 알고리즘
  • 백트레킹
  • 스택
  • 코딩테스트 연습
  • 진수
  • sql
  • 문자열
  • 동적계획법
  • 재귀
  • DP
  • 프로그래머스
  • BFS
  • MySQL
  • 백준ㅇ

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
연권

달콘박스

프로그래머스 코딩테스트 연습 Level2 - 단체 사진 찍기 [ Java ]
Algorithm

프로그래머스 코딩테스트 연습 Level2 - 단체 사진 찍기 [ Java ]

2021. 7. 2. 13:36
반응형

나올 수 있는 경우의 수가 8! = 40320이고 조건이 최대 100개밖에 되지 않으므로 모든 경우의 수에 대한 모든 조건을 확인한다고 해도 4032000번만 확인하면 되므로 모든 경우의수를 확인합니다.

 

class Solution {
        static boolean[] visited = new boolean[127]; // 캐릭터 사용 여부 ex visitd['A'] = true : 어피치 방문함
    static int[] position = new int[127]; // 캐릭터의 위치 ex position['A'] = 0 'A'는 0번에 있다.
    static int count = 0;
    static boolean check(String[] data) {
        for (String str : data) {
            char a = str.charAt(0); // 첫 번째 캐릭터
            char b = str.charAt(2); // 두 번째 캐릭터
            int len = Math.abs(position[a] - position[b]); // 현재 길이
            char sign = str.charAt(3); // 등호나 부등호
            int expectLen = str.charAt(4) - '0' + 1; // 조건의 길이
            if (sign == '>' && len <= expectLen)
                return false;
            else if (sign == '<' && len >= expectLen)
                return false;
            else if (sign == '=' && len != expectLen)
                return false;
        }
        return true;
    }

    static void bt(int depth, String[] data) {
        if (depth == 8) {
            if (check(data)) count++;
            return;
        }

        for (char c : new char[] {'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T'}) {
            if (visited[c]) continue;
            visited[c] = true;
            position[c] = depth;
            bt(depth + 1, data);
            visited[c] = false;
        }
    }

    public int solution(int n, String[] data) {
        count = 0;
        bt(0, data);
        return count;
    }
}
반응형
저작자표시 동일조건 (새창열림)

'Algorithm' 카테고리의 다른 글

프로그래머스 코딩테스트 연습 Level1 - 3진법 뒤집기 [ javascript ]  (0) 2021.08.13
전치행렬 구하기 [javascript]  (0) 2021.08.13
백준 1010번 다리놓기 [ Java ]  (0) 2021.06.26
2021 Summer Coding - 여름방학 스타트업 인턴 프로그램 코딩테스트 후기  (0) 2021.05.26
백준 2529번 부등호 [ Java ]  (0) 2021.05.19
    'Algorithm' 카테고리의 다른 글
    • 프로그래머스 코딩테스트 연습 Level1 - 3진법 뒤집기 [ javascript ]
    • 전치행렬 구하기 [javascript]
    • 백준 1010번 다리놓기 [ Java ]
    • 2021 Summer Coding - 여름방학 스타트업 인턴 프로그램 코딩테스트 후기
    연권
    연권

    티스토리툴바