일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- 구현
- 독학
- 백준
- SWIFT
- 카카오인턴십
- 프로그래머스
- istringstream
- 부주상골증후군
- 스택
- 코딩테스트
- 롯데정보통신
- 부주상골수술
- SQLD
- 부주상골
- 분할정복
- dp
- DFS
- 코테
- sql
- 독일어
- ChatGPT
- 부주상골수술후기
- 카카오인턴
- c++
- 카카오코테
- 리눅스
- 세브란스
- 독일어독학
- IOS
- BFS
Archives
- Today
- Total
슈뢰딩거의 고등어
[프로그래머스] 동적계획법 (Dynamic Programming) N으로 표현 본문
https://programmers.co.kr/learn/courses/30/lessons/42895
코딩테스트 연습 - N으로 표현
programmers.co.kr
처음에 보고 익숙하긴 했는데, 이런 문제는 DFS 로 풀었던지라 왜 DP 로 풀란건지 싶었다.
얼추 숫자 횟수를 기준으로 잡으면 되겠다라고 생각했다.
1. DP 에 N 사용횟수를 인덱스로 잡고
2. 만들 수 있는 숫자들을 집어 넣는다.
- x개를 사용해서 만들수 잇는 수를 구하는 방법은
1) NNNN....NN : x번 그냥 숫자만 이용
2) k는 1~k-1 까지
- dp[x-k] + dp[k]
- dp[x-k] * dp[k]
- dp[x-k] - dp[k]
- dp[x-k] / dp[k]
- 주의해야 할점은 나누기 할때 수를 0 으로 나누지 않도록 if 하나 걸어주기
3. 집어넣은 수 중에 number가 있는지 확인하고 있다면 현재 인덱스를 리턴해준다.
4. 인덱스가 8 보다 커지면 -1 로 리턴한다.
조금 해맸던 점은, 제곱을 할때 식을 pow(10, i) 가 아닌 10*i 로 잘못 작성해놓고 잘못된거 찾지못해서 8번 통과 안된다고 삽질했다.
이런식의 dp 도 있구나 싶었다.
[전체 코드]
#include <string>
#include <vector>
#include <iostream>
#include <map>
#include <cmath>
using namespace std;
int solution(int N, int number) {
int answer = 0;
if(N == number)
return 1;
vector <vector<int>> v(9);
v[1].push_back(N);
int start = 2;
while(start <= 8) {
int tmp = N;
for(int i=1; i<start; i++)
tmp += N * pow(10, i);
v[start].push_back(tmp);
for(int i=1; i<start; i++) {
vector <int> a = v[i];
vector <int> b = v[start-i];
for(auto ele1 : a) {
for(auto ele2 : b) {
v[start].push_back(ele1+ele2);
v[start].push_back(ele1*ele2);
v[start].push_back(ele1-ele2);
if(ele2 != 0 && ele1/ele2 > 0)
v[start].push_back(ele1/ele2);
}
}
}
for(auto ele: v[start]) {
if(ele == number)
return start;
}
start++;
}
return -1;
}
'알고리즘' 카테고리의 다른 글
문자열 분리 (0) | 2022.05.10 |
---|---|
2018 KAKAO BLIND RECRUITMENT[1차] > 추석 트래픽 (0) | 2022.05.10 |
[2017 카카오코드 본선] GPS (level3) (0) | 2022.05.09 |
[2017 카카오코드예선] 보행자 천국 (LV3) (0) | 2022.04.25 |
[2021 카카오 채용형 인턴십] 숫자문자열과 영단어 (LV1) (0) | 2022.04.23 |
Comments