-
[프로그래머스] 동적 계획법 - N으로 표현알고리즘 공부/문제 풀이 2020. 8. 23. 13:59
...
처음에는 각각의 수에 대해 몇개의 N으로 표현가능한가 점화식도 세워보고..
규칙성도 찾으려 했으나.. 너무 어려워서 포기
그래서 결국 풀이를 서칭해봤다.
핵심은 i개의 N으로 표현 가능한 수들을 찾고 number가 그 안에 포함되어있는 지를 체크하는 거였다.
[프로그래머스] N으로 표현
문제설명 아래와 같이 5와 사칙연산만으로 12를 표현할 수 있습니다. 12 = 5 + 5 + (5 / 5) + (5 / 5) 12 = 55 / 5 + 5 / 5 12 = (55 + 5) / 5 5를 사용한 횟수는 각각 6,5,4 입니다. 그리고 이중 가장 작은 경우..
dheldh77.tistory.com
흑흑 글만 읽고 코드는 내가 짜보려고 했으나
op2를 구하는 것에 어려움을 느꼈고 결국 포기.. ㅎㅎ
import java.util.*; class Solution { public int solution(int N, int number) { int answer = -1; ArrayList<Integer> list=new ArrayList<>(); String temp=""; String n=Integer.toString(N); for(int i=1;i<=8;i++) { int size=list.size(); for(int j=0;j<size;j++) { int k=list.get(j); if(!list.contains(k+N))list.add(k+N); if(!list.contains(k*N))list.add(k*N); if(k!=0 && !list.contains(k/N))list.add(k/N); if(k!=0 && !list.contains(N/k))list.add(N/k); } temp+=n; list.add(Integer.parseInt(temp)); if(list.contains(number)) return answer=i; } return answer; } }
이건 내가 짰던 코드인데
현재 배열에 대해 N과 사칙연산 한 것을 더해주면서 반복문을 돈다.
즉 4개의 N을 가지고 수를 만들 때 나는 "(3개의 N으로 만들수 있는 수) *+/- (N)"의 결과값들만 list에 포함한 것이다.
"(2개의 N으로 만들 수 있는 수) *+/- (2개의 N으로 만들 수 있는 수)" 이것도 포함해 줬어야 했는데 ㅠㅠ
이과정이 복잡해서 결국 정답코드를 봤다..
public static int solution(int n, int num) { int ans = 0; ArrayList <HashSet<Integer>> list = new ArrayList<>(); HashSet <Integer> set = new HashSet<>(); set.add(n); list.add(set); while(ans < 8) { if(list.get(ans).contains(num)) break; ans++; HashSet <Integer> nset = new HashSet<>(); String s = ""; for(int i = 0; i < ans + 1; i++) s += String.valueOf(n); nset.add(Integer.parseInt(s)); for(int i = 0; i <= ans / 2; i++) { for(int j = 0; i + j < ans; j++) { for(Iterator it1 = list.get(i).iterator(); it1.hasNext();) { int op1 = (int)it1.next(); for(Iterator it2 = list.get(j).iterator(); it2.hasNext();) { int op2 = (int)it2.next(); nset.add(op1 + op2); nset.add(op1 - op2); nset.add(op1 * op2); if(op2 != 0) nset.add(op1 / op2); } } } } list.add(nset); } return (ans >= 8) ? -1 : ans + 1; }
참고 블로그에서 가져온 정답 코드이다.
이 문제가 동적계획법인 이유는 이전의 결과값들을 저장해서 사용해서 일까..?
흠.. 이문제를 완전탐색을 이용해서 푼 사람들도 많았다.
'알고리즘 공부 > 문제 풀이' 카테고리의 다른 글
[프로그래머스] 동적계획법 - 등굣길 (1) 2020.08.24 [프로그래머스] 동적 계획법 - 정수 삼각형 (1) 2020.08.23 [프로그래머스] 탐욕 알고리즘 - 단속카메라 (1) 2020.08.18 [프로그래머스] 탐욕 알고리즘 - 섬 연결하기 (1) 2020.08.18 [프로그래머스] 탐욕 알고리즘 - 구명보트 (1) 2020.08.18