티스토리 뷰
코딩테스트 연습 - N으로 표현
programmers.co.kr
이문제는 dp로 분류되어있는 문제이다. dp란 작은 문제로 쪼개서 그 작은 문제를 저장해 놓았다가 다시 사용하며 답을 구하는 것이다.라고 생각했는데 처음에 이 문제가 어떻게 dp로 접근하지..? 여기부터 막혔었다..ㅎ 1개 사용 2개 사용을 이용해서 3개 사용을 할 수 있다는 것을 깨닫고 저장하여서 풀었던 문제이다! 개념이 흔들리니 문제 풀기가 막막했다는... dp알고리즘에 대한 개념을 제대로 정리해봐야겠다고 생각했다
문제풀이
-주어진 N이 1 ~ 8개로 만들 수 있는 모든 숫자를 dp에 저장한다.
-dp [i] = {dp [j] , dp [j-i]} -> ex) dp [3] = {dp [1] , dp [2]} , {dp [2], dp [1]} : (- , /) 연산의 경우 순서에 따라 값이 달라지므로 두 개다 연산 수행을 해야 함
-각각의 dp배열에는 Set을 지정해서 중복되지 않으면서 만들 수 있는 모든 숫자의 종류를 저장하고 다음 차례 때 이용하면서 dp배열을 채워간다.
-각각 턴마다 number이 포함되어있는지 확인해서 바로 정답을 return
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
class Solution {
//1부터 시작해서 최대 8개의 N을 이용할 수 있도록 배열크기를 잡아줌
//Set을 지정해서 겹치는 숫자를 제외한 답만 저장할 수 있도록 함
static HashSet<Integer>[] dp = new HashSet[9];
public int solution(int N, int number) {
if(N==number) {
return 1;
}
String n_ = String.valueOf(N);
for(int i=0;i<=8;i++) {
dp[i] = new HashSet<Integer>();
if(i==1) dp[1].add(Integer.parseInt(n_));
if(i<2 ) continue;
//ex ) dp[3]에 NNN이 들어갈 수 있도록 지정
n_+=String.valueOf(N);
dp[i].add(Integer.parseInt(n_));
for(int j=1;j<i;j++) {
calc(j,i);
//찾으려는 number가 만들어졌을 경우 바로 리턴
if(dp[i].contains(number)) {
return i;
}
}
}
return -1;
}
//각각 N의 개수마다 사칙연산을 해서 배열에 담아줌
static void calc(int a,int b) {
Iterator<Integer> listA = dp[a].iterator();
Iterator<Integer> listB = dp[b-a].iterator();
while(listA.hasNext()) {
int numA = listA.next();
while(listB.hasNext()) {
int numB = listB.next();
dp[b].add(numA+numB);
dp[b].add(numA-numB);
dp[b].add(numA*numB);
if(numB!=0)
dp[b].add(numA/numB);
}
listB = dp[b-a].iterator();
}
}
}
'CS공부 > 알고리즘&문제풀이' 카테고리의 다른 글
[프로그래머스]해시(Hash):베스트앨범(java) (0) | 2020.08.04 |
---|---|
[프로그래머스]해시:위장(java) (2) | 2020.07.29 |
[백준 17837]새로운 게임2/삼성 sw역량 테스트 기출(java) (0) | 2020.07.24 |
[프로그래머스]스택/큐:프린터(java) (0) | 2020.07.14 |
[프로그래머스]정렬:가장 큰 수(java) (0) | 2020.07.13 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Baekjoon
- git
- 최소 스패닝 트리
- 분리 집합
- 삼성 sw역량테스트
- dfs
- BFS
- Stomp
- programers
- 코딩테스트
- MST
- 정렬
- 프로그래머스
- SWEA
- java
- 백준
- 알고리즘
- sockjs
- Spring
- 운영체제
- 완전탐색
- DP
- websocket
- 채팅
- 자바
- Heap
- OS
- JavaScript
- Oracle
- 삼성 sw역량 테스트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함