728x90
반응형

문제풀이(Problem Solving) 326

프로그래머스, 로또의 최고 순위와 최저 순위 : C++ [CPP]

어렵지는 않지만 그렇다고 단순하지도 않다. https://programmers.co.kr/learn/courses/30/lessons/77484 #맞는 풀이 #include #include using namespace std; vector solution(vector lottos, vector win_nums) { vector answer; int curWin = 0; // 일치하는 숫자 int curZero = 0; // 0인 숫자 int min, max = 0; //최저, 최고등수 for(int a : lottos){ if( a == 0){curZero++; continue; } // 당첨번호가 지워져있다면 ++ for(int b : win_nums){ if( a == b){ curWin++; con..

백준, BOJ, 14502번, 연구소 : C++ [CPP]

음.. 생각은 빨리했는데.. 오래걸림.. 왜냐면.. 초기화를 잘못했다. 아...내 1시간반 https://www.acmicpc.net/problem/14502 그렇게 어렵지 않았다. 벽을 무작위로 세워야 하는 것을 이미 알기에.. Brute Force를 해야하는 것은 알았지만 그냥 백트래킹 복습삼아 적용했다. 가장 처음 제출한 풀이.. #include #include #include #define X first #define Y second using namespace std; int map[8][8]; int visited[8][8]; int dx[4] = {1,-1,0,0}; int dy[4] = {0,0,1,-1}; int N,M; int ans = 64; stack stk; // DFS 스택 ve..

백준, BOJ, 2805번, 나무자르기 : C++ [CPP]

우선 숫자가 큰 문제이다. 뭔가 크다. 어렵진 않았지만.. 그냥 오랜만에 푸니까 감이 안왔다. https://www.acmicpc.net/problem/2805 시간초과 될 것을 알면서도 brute force로 해봤다. #include using namespace std; int N,M; int maxi = 0; int sum; int arr[1000001]; int main(){ cin >> N >> M; for(int i = 1; i> a; arr[i] = a; if(a>=maxi){ maxi = a; } } maxi--; while(1){ sum = 0; for(int j = 1; j0) sum += temp; } if(sum>=M){ break; } maxi--; } cout > N >> M; f..

백준, BOJ, 1011번, Fly me to the Alpha Centauri : C++ [CPP]

어렵다기보다.. 수학으로 풀면 규칙 찾아내는 것이지만 다이나믹 프로그래밍 분류에 있어서 뭐 그렇게 풀려고 했으나..내 머리가 모자라서.. https://www.acmicpc.net/problem/1011 1011번: Fly me to the Alpha Centauri 우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 그리고 그가 지구라는 세상에 발을 내려 놓은 지 23년이 지난 지금, 세계 최연소 ASNA 우주 비행 www.acmicpc.net 우선 다이나믹프로그래밍으로 풀려고하는 방법은 큰 문제를 작은 문제로 쪼개는 것이다. 때문에 x부터 y라면 x 부터 y-1까지 가는 방법에서 y-1에 2로 도착하는 방법과 y-1에 1로 도착하는 방법이 있으니 이것을 잘..

백준, BOJ, 1520번, 내리막 길 : C++ [CPP]

어렵지 않지만 생각은 해야하는 문제다. 나는 그냥 되는대로 풀었다가 된통당했다. https://www.acmicpc.net/problem/1520 시간이 충분해보이지만 500*500에 대해서 하나의 경로가 아니라 여러 개를 조사한다면 미친 짓이다. 왜냐면.. 시간이 오래걸리기 때문이다. #처음 틀린 풀이 #include using namespace std; //0으로 초기화된 배열 선언 int map[501][501]; int dp[501][501]; int row, col; int main() { cin >> row >> col; for (int i = 0; i > map[i][j]; } } //최초의 출발은 1..

백준, BOJ, 9251번, LCS : C++ [CPP]

어려웠다. 부분으로 쪼갤 수 있었지만 생각이 잘 안났다. https://www.acmicpc.net/problem/9251 모든 부분을 부분수열로 쪼개보니.. for문이 3개나 나와서 그냥 떄려쳤다. DP문제라는 것을 한 번에 파악할 수 있었다. 어떻게 전체 문제를 부분으로 쪼갤 수 있을까 고민했다. 처음에는 맨앞에서부터 접근했지만 틀린 접근법이었다. 마지막부터 조사했어야 했다. 길이가 L1, L2의 문자열이 있다. 만약 마지막 부분이 같다면 해당 마지막부분을 제외한 채로 나머지 L1 -1 , L2 - 1의 문자열의 가장 긴부분을 조사하면 될 터였다. 마지막 부분이 다르다면 둘 다 제외하는 것이 아닌 L1 - 1, L2 또는 L1, L2 - 1의 문자열을 조사하면되었다. 그리고 문자열이 비어있는 것과의 ..

백준, BOJ, 2293번 C++ [CPP] *

용량도 작다 https://www.acmicpc.net/problem/2293 심히 기분이 좋지 않다. 재귀로 푸는 방법을 알았지만.. 용량도.. 시간도 초과할 것이 뻔했다. 다른 방법을 찾는데.. 너무 헤맸다. 이러한 방법은 정말 많은데 충분히 익혀놔야할 방법 중 하나같다. 하향식보다 이번엔 상향식으로 하는 것이 맞았다.dp에 저장해가며 푸는 것이 이 문제의 핵심이었을 것이다. #include using namespace std; int n,k; int coin[101]; int dp[100001]; int main(){ cin >> n >> k; for(int i = 1; i> a; coin[i] = a; } //dp[0] = 1 을 추가시켜주어야함 //첫번째 코인으로 만들 수 있는 경우의 수를 추가..

백준, BOJ, 2193번 C++ [CPP]

다이나믹 프로그래밍이 재밌어지는 시기 https://www.acmicpc.net/problem/2193 우선 예를 몇개 들고나보면 하위 문제로 쪼개지는 것을 알 수 있고 하위 문제에 대해 답을 구하면 된다. 재귀함수로 구현을 해보고 해당 함수를 Memoization 하게되면 시간 안에 풀어진다. #include using namespace std; int N; long long dp[91][2]; int main(){ cin >> N; dp[1][1] = 1; dp[2][0] = 1; for(int i = 3; i

백준, BOJ, 17298번 C++ [CPP]

DFS, BFS 알고리즘을 알아야 풀 수 있는 문제다. https://www.acmicpc.net/problem/17298 이것은 그냥 뭐 생각대로 하기 쉽지 않다. 해보려 했는데..인덱스가 저장이 안되어서 정말 힘들었다.그래서 pair를 쓸까 하다가.그냥 스택 2개를 썼다. 인덱스를 이용해야 한다라는 생각을 하면 어렵지만 생각할 수 있는 문제라고 한다.한 번에 생각하기는 확실히 힘든 것 같다. 다른 사람과 풀이를 비교하지 않는 이유는원리는 같아서 그렇다. #include #include #include #include using namespace std; stack num; // 숫자를 넣음 stack stk; // 인덱스를 넣음 int N; int arr[1000001]; void init(){ io..

728x90
반응형