に照準を合わせる
総プロセス
友达が立ち上がることができる総数は8です!はい.
これらのすべての状況について、すべての条件が適切かどうかをそれぞれ比較します.
つまり、DFSでずっと友人を配置した後、8人が立っている間に、彼らの配置が条件に合っているかどうかをチェックします.
ミラーを任意の数で配置する方法(array()
パラメータとして展開を受信し、展開が条件に合致するかどうかを確認する方法(check()
final char[] FRIENDS = {'A', 'C', 'F', 'J', 'M', 'N', 'R', 'T'};
boolean[] isUsed = new boolean[FRIENDS.length];
int answer = 0;
//매번 data를 파라미터로 넘기지 말고 전역변수로
String[] conditions;
public int solution(int n, String[] data) {
StringBuilder sb = new StringBuilder();
//전역변수 conditions가 data 참조
conditions = data;
arrange(0, sb);
return answer;
}//solution()
public void arrange(int idx, StringBuilder sb) {
if(idx==FRIENDS.length) {
//8명 배치 다 됐으면, 조건 검사 통과하면 answer 값 증가
if(check(sb)) answer++;
return;
}//if end
for(int i=0; i<FRIENDS.length; i++) {
if(!isUsed[i]) {
sb.append(FRIENDS[i]);
isUsed[i] = true;
arrange(idx+1, sb);
isUsed[i] = false;
//위에 붙인 문자열 제거
sb.delete(idx, sb.length());
}//if end
}//for end
}//combination() end
//조건에 맞는지 확인하는 메소드
public boolean check(StringBuilder sb) {
String friend1;
String friend2;
char operator;
int gap;
int realGap;
for (String condition : conditions) {
friend1 = String.valueOf(condition.charAt(0));
friend2 = String.valueOf(condition.charAt(2));
operator = condition.charAt(3);
//char->int
gap = condition.charAt(4) - '0';
realGap = Math.abs(sb.indexOf(friend1)-sb.indexOf(friend2))-1;
switch(operator) {
case '=' :
if(realGap != gap) return false;
break;
case '<' :
if(realGap >= gap) return false;
break;
case '>' :
if(realGap <= gap) return false;
break;
}//switch end
}//for end
return true;
}//check() end
Reference
この問題について(に照準を合わせる), 我々は、より多くの情報をここで見つけました https://velog.io/@nelljun/단체-사진찍기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol