알고리즘/프로그래머스

    [프로그래머스 C++] - 기능 개발

    문제 : 기능 개발 분석 조건이 간결하다. 1. 매일 개발이 진행된다. 2. 배포는 앞에서부터 이뤄진다. 처리 순서를 반복문을 통해 간단하게 구현할 수 있다. vector solution(vector progresses, vector speeds) { vector answer; while (true) { // base case if (progresses.size() == 0) break; else if (progresses.size() == 1) { answer.push_back(1); break; } // progresses for (size_t i = 0; i < progresses.size(); i++) { progresses[i] += speeds[i]; } // 배포 if (progresses...

    [프로그래머스 C++] - 다리를 지나는 트럭

    문제 : 다리를 지나는 트럭 분석 고려할 조건들이 다소 복잡하다. 대기차가 1대 이상 존재할 때, 차가 다리 위로 올라갈 수 있으면 진입시킨다. 대기차가 있지만, 집입 불가 시 앞선 차량이 빠질 때까지 기다린다. 다리 위 차량들은 시간이 흐를수록 거리가 줄어든다. 대기차가 없고 다리 위 차가 있다면 시간은 계속 흐른다. 대기차가 없고, 다리 위 차량도 없다면 종료. 조건 1, 2 번 논리를 구현하기가 쉽지 않다. 쉽지 않은 이유는 습관 때문이다. 나도 그렇지만 사람 대부분은 아마 남은 길이를 처리할 때, 다리에 진입한 순서대로 처리하려고 할 것이다. 하지만 깊게 생각해보면 굳이 남은 길이의 데이터들은 진입한 순서 정보까지 저장하고 있을 필요는 없다. 젤 짧은 길이가 결국 다리 위 진입한 차량들 중 가장 ..

    [프로그래머스 C++] - 멀쩡한 사각형

    문제 : 멀쩡한 사각형 분석 직사각형 구조이기에 대각선 기준으로 대칭인 것을 생각하자. 저 한 블록의 규칙을 정리하자면 다음과 같다. 블록의 크기는 (w / gcd) x (h / gcd) 이다. (gcd는 주어진 수의 최대 공약수이다.) 블록 내의 유호 하지 않은 정사각형의 개수는 (블록의 가로 + 블록의 세로 -1)이다. 구현 ※ gcd를 구하는 과정을 재귀로 처리했다. // GCD func, x > y 가정 int calGCD(int x, int y) { if (y == 0) return x; else return calGCD(y, x%y); } long long solution(int w, int h) { long long answer = 1; long long ret = (long long)w*(..

    [프로그래머스 C++] - 스킬트리

    문제 : 스킬트리 분석 다중 for 문을 이용하면 쉽게 풀 수 있는 문제이다. 배운 선행 스킬 개수인 int형 cnt 변수와 bool형 변수인 check를 통해 그때그때 판단해서 처리했다. 구현 int solution(string skill, vector skill_trees) { int answer = 0, cnt = 0; bool check = true; for (int i = 0; i < skill_trees.size(); i++) { for (int j = 0; j < skill_trees[i].size(); j++) { for (int x = 0; x < skill.size(); x++) { if (skill[x] == skill_trees[i][j]) { if (x == cnt) { cnt++..

    [프로그래머스 C++] - 124 나라의 숫자

    문제 : 124 나라의 숫자 분석 10 진법 숫자나라 진법 10 진법 숫자나라 진법 4 11 19 141 5 12 20 142 6 14 21 144 숫자나라의 진법이 기본적으로 3진법을 따라가는 것을 알 수 있다. 따라서 맨 뒷자리인 1, 2, 4 는 각각 주어진 숫자를 3으로 나눈 나머지 1, 2, 0에 해당되는 것을 구할 수 있다. 또한 3개씩 끊어 생각할 때, 맨 뒷자리를 제외한 앞자리는 동일한 것을 알 수 있다. 19, 20, 21로 예를 들면 각기 맨 뒷자리는 나머지인 1, 2, 0에 해당하는 1, 2, 4이고, 앞자리는 14로 동일하다. 여기서 14는 10진법으로 6인데 6이 나온 순서는 다음과 같다. 3개씩 끊어 생각할 때, 그 중 3의 배수에서 3을 뺀 값을 3으로 나눈 값이다. (3으로 ..