https://www.acmicpc.net/problem/9095


mem[n] = mem[n-1] + mem[n-2] + mem[n-3]


을 이용(1,2,3만 이용 해서 가능)


#include <iostream>
using namespace std;
int main(){
int mem[11] = {0};
int T,n;
mem[1] = 1; mem[2] = 2; mem[3] = 4;
cin >> T;
for(int i = 0; i < T; i++){
cin >> n;
for(int j = 4; j <= n; j++){
mem[j] = mem[j-1] + mem[j-2] + mem[j-3];
}
cout << mem[n] << endl;
}
}


반응형

'프로그래밍 > 문제풀이' 카테고리의 다른 글

백준 2156(포도주 시식)  (0) 2018.11.03
백준 1107 (리모컨)  (0) 2018.11.03
백준 1652 (누울 자리를 찾아라)  (0) 2018.11.03
백준 1463(1로 만들기)  (0) 2018.10.29
백준 3986(좋은 단어)  (0) 2018.10.20

https://www.acmicpc.net/problem/1463


동적계획법을 이용해 풀었습니다.

mem[i] = mem[i-1] +1 은 우선 최댓값(?)을 먼저 넣습니다.





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <algorithm>
using namespace std;
 
 
 
int main(){
    int mem[1000001];
    int N;
    
    cin >> N;
    mem[1= 0;
    for(int i = 2; i <= N; i++){
        mem[i] = mem[i-1]+1;
        if(i%2==0) mem[i] = min(mem[i],mem[i/2]+1);
        if(i%3==0) mem[i] = min(mem[i],mem[i/3]+1);
    }
    
    cout << mem[N];
    
    return 0;
}
cs



bfs로도 풀 수 있을 거 같아서, bfs로도 한 번 풀어봤습니다.


#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
int bfs(int n) {
bool visit[1000001];
int idx=n;
int count = 0;
queue<int> q;
q.push(n);
while(1) {
int size = q.size();
for(int i=0; i<size; i++) {
idx = q.front();
q.pop();
if(idx == 1)
return count;
if(visit[idx-1] == 0) {
q.push(idx-1);
visit[idx-1] = 1;
}
if(idx%2 == 0 && visit[idx/2] == 0) {
q.push(idx/2);
visit[idx/2] = 1;
}
if(idx%3 == 0 && visit[idx/3] == 0) {
q.push(idx/3);
visit[idx/3] = 1;
}
}
count++;
}
}
int main(){
int n;
cin >> n;
cout << bfs(n);
return 0;
}


반응형

'프로그래밍 > 문제풀이' 카테고리의 다른 글

백준 2156(포도주 시식)  (0) 2018.11.03
백준 1107 (리모컨)  (0) 2018.11.03
백준 1652 (누울 자리를 찾아라)  (0) 2018.11.03
백준 9095 (1,2,3 더하기)  (0) 2018.10.31
백준 3986(좋은 단어)  (0) 2018.10.20

https://www.acmicpc.net/problem/3986



스택으로 짜면 쉬울 거 같아 짜봤습니다.



#include <iostream>
#include <stack>
using namespace std;
int main(){
ios::sync_with_stdio(false);
int N,ret = 0;
cin >> N;
for(int i= 0; i< N; i++){
string str;
stack<char> st;
cin >> str;
for(int j = 0; j < str.length(); j++){
if(!st.empty()&&st.top() == str[j])st.pop();
else st.push(str[j]);
}
if(st.empty()) ret+=1;
}
cout << ret;
}


반응형

'프로그래밍 > 문제풀이' 카테고리의 다른 글

백준 2156(포도주 시식)  (0) 2018.11.03
백준 1107 (리모컨)  (0) 2018.11.03
백준 1652 (누울 자리를 찾아라)  (0) 2018.11.03
백준 9095 (1,2,3 더하기)  (0) 2018.10.31
백준 1463(1로 만들기)  (0) 2018.10.29

+ Recent posts