algorithm/프로그래머스
[프로그래머스] N으로 표현 (07.24)
자바왕세자
2020. 7. 24. 19:05
문제
https://programmers.co.kr/learn/courses/30/lessons/42895
코딩테스트 연습 - N으로 표현
programmers.co.kr
접근법
문제 분류는 DP로 되어있지만 DFS로 해결하였다.
그냥 사칙연산만 있었다면 간단했을텐데
55, 555처럼 숫자를 이어 붙이는 것까지 가능해서 좀 복잡했다.
tmp라는 변수를 두고 그 변수에 55, 555같이 이어붙여지는 숫자를 넣어주었다.
8개 이상의 숫자는 사용할 수 없으므로 반복문은 8까지만 돌렸다.
코드
class Solution {
private int min = Integer.MAX_VALUE;
private int N = 0;
private int number = 0;
public int solution(int N, int number) {
this.number = number;
this.N = N;
dfs(0,0);
return min>8? -1:min;
}
private void dfs(int num, int cnt){
// 숫자가 8개가 넘어가서 return
if(cnt > 8)
return;
// num이 타겟넘버와 같다면 min에 최소값 저장
if(num == number && cnt <= 8) {
min = Math.min(cnt, min);
return;
}
//숫자가 이어붙여지는 것을 고려하여 포문을 돌리며 DFS
int tmp = 0;
for(int i=1;i<=8;i++){
tmp = tmp*10 + this.N;
dfs(num+tmp, cnt+i);
dfs( num-tmp, cnt+i);
dfs( num*tmp, cnt+i);
dfs( num/tmp, cnt+i);
}
}
}