-
[알고리즘] 프로그래머스 단체사진 찍기 Java(자바)코딩/알고리즘 2022. 1. 7. 23:54
- 문제
https://programmers.co.kr/learn/courses/30/lessons/1835
코딩테스트 연습 - 단체사진 찍기
단체사진 찍기 가을을 맞아 카카오프렌즈는 단체로 소풍을 떠났다. 즐거운 시간을 보내고 마지막에 단체사진을 찍기 위해 카메라 앞에 일렬로 나란히 섰다. 그런데 각자가 원하는 배치가 모두
programmers.co.kr
- 코드 설명
Rule class를 작성하여 data에 있는 코드를 변환해 줍니다.
이 코드에서 핵심은 규칙을 통해 A와 B사이의 인덱스 차이를 min , max로 설정해 주어야 합니다.
'=' 일경우 min,max는 같아야 합니다.
'<' 일경우 숫자가 2인경우에 둘사이에 1명이하만 허용한다는 뜻하고 인덱스 차이를 고려하여 min = 1, max = num
'>' 일경우 숫자가 2인경우 둘사이에 최소 3명 최대 6명까지 허용합니다(ex A의 index1일때 B의 최소 index가 5이상이어야함 따라서 둘의 차이는 4) min = num + 2 ,max =7가 되어야 한다.
order는 카카오 캐릭터들의 배열이 저장되어있는 문자열이고 다배치가 되어야 규칙검사를 시작한다.
이것을 재귀로 풀이했으며 다른분들의 코드를 보니 정말 다양한 방법이 많았습니다.
class Solution { static String[] persons; static int answer; static Rule[] rules; public int solution(int n, String[] data) { int len = data.length; answer = 0; persons = new String("A C F J M N R T").split(" "); rules = new Rule[len]; boolean[] visited = new boolean[persons.length]; for(int i=0; i<len; i++){ rules[i] = new Rule(data[i]); } sol(visited, new String(),0); return answer; } static void sol(boolean[] visited, String order, int level){ if(level == 8){ for(Rule r : rules){ if(r.check(order) == false) return; } answer++; return; } for(int i=0; i<8; i++){ if(visited[i] == false){ visited[i] = true; sol(visited, order.concat(persons[i]), level + 1); visited[i] = false; } } } } class Rule{ String A; String B; int min; int max; public Rule(String rule){ char op = rule.charAt(3); int num = rule.charAt(4) - '0'; A = Character.toString(rule.charAt(0)); B = Character.toString(rule.charAt(2)); if(op == '='){ min = num+1; max = num+1; } else if(op =='<'){ min = 1; max = num; } else if(op == '>'){ min = num+2; max = 7; } } public boolean check(String order){ int idxA = order.indexOf(this.A); int idxB = order.indexOf(this.B); int result = Math.abs(idxA - idxB); if( min<= result && result <=max){ return true; } else return false; } }
- 결과
'코딩 > 알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 괄호 변환 Java(자바) (0) 2022.01.11 [알고리즘] 프로그래머스 메뉴 리뉴얼 Java(자바) (1) 2022.01.10 [알고리즘] 프로그래머스 카카오프렌즈 컬러링북 Java(자바) (1) 2022.01.06 [알고리즘] 프로그래머스 오픈채팅방 Java(자바) (0) 2022.01.05 [알고리즘] 프로그래머스 문자열 압축 Java(자바) (0) 2022.01.04