목록프로그래머스 알고리즘/2단계 (62)
N

for문으로 간단하게 풀 수 있는 문제..! 우선 맨 처음 송신탑은 신호를 받을 수 있는 탑이 없으니 answer에 0을 넣고 시작한다. 그리고 for문은 heights[1]부터 시작하도록 하였다. 이제 0 ~ i - 1 까지 탑의 높이를 확인하면서 반복문을 돌면 된다. 단, j는 i - 1부터 시작해서 j가 0과 같을 때까지 거꾸로 반복문을 돌도록 한다. 송신탑의 높이가 수신탑의 높이보다 작으면 answer에 j + 1을 넣어준다. 만약 j == 0이면 수신할 수 있는 탑이 없으니 0을 넣어준다..! 간단하다..! (수신탑이 없으면 0, 있으면 해당 탑의 위치를 나타내어야 하기 때문..!) #include #include using namespace std; vector solution(vector h..

스킬 트리 문제.. 우선 for문으로 skill_trees 에 들어가 있는 스킬 수 만큼 반복하자. 그리고 스킬의 인덱스를 체크하는 index 변수와 순서대로 스킬을 찍을 수 있는지 알 수 있는 cnt 변수, 스킬의 순서를 체크하는 before 반복자를 선언한다. while문을 돌면서 순서에 맞게 찍을 수 있는지 체크하도록 하자. 우선 종료 조건으로 index가 스킬의 사이즈와 같다면 break를 걸어 탈출하도록 하였다. 아니라면 반복자 itr을 선언하여 skill_trees[i]에서 skill[index]의 위치를 찾아낸다. 만약 순서가 제대로 맞지 않는다면 즉, before 반복자가 itr 반복자보다 크다면 cnt를 0으로 만들고 탈출하도록 하였다. 순서대로 찍었다면 before 반복자는 itr 반복..

10진법의 숫자를 1,2,4의 숫자로 표현해야 한다. n을 3으로 나눴을 때 나머지가 0이면 4, 1이면 1, 2이면 2를 표현할 수 있게 num[3]을 선언하였다. n이 0일 때까지 계속 3으로 나눠주도록 한다. 그리고 나머지를 이용하여 num 배열에서 알맞은 숫자를 선택하도록 한다. rem == 0 일때, n -= 1을 해준다. 그리고 answer에 num[rem] + answer을 계속해서 해주면 124로 표현한 숫자가 나오게 된다. #include #include using namespace std; string solution(int n) { string answer = ""; int num[3] = {4,1,2}; while(n > 0) { int rem = n % 3; n /= 3; if(r..

우선 개발을 하는 데 걸리는 시간을 day 벡터에 넣어준다..! 예시대로 하면 day에는 {7, 3, 9}가 들어가게 된다. 그리고 while문으로 day가 빌 때까지 실행을 한다. 맨 앞에 있는 시간을 current에 저장해 두고, int형 ind를 선언한다. ind는 current보다 큰 수를 만날때까지 ind++을 해준다. 큰 수를 만나면 break를 하여 for문을 빠져나간 후, day 벡터의 처음부터 ind까지 지워버린다. 그리고 ind를 answer에 넣어주면 배포의 개수를 알 수 있다..! #include #include #include using namespace std; vector solution(vector progresses, vector speeds) { vector answer,..

큐 형태를 생각하면서 풀면 되는 문제..! 큐를 선언하면 되지만 for문 돌리면서 큐에 넣기 귀찮아서 그냥 벡터로 하였다... tmp 벡터에 priorities를 넣어주고, 내림차순으로 tmp를 정렬한다. 그리고 tmp.front()와 priorities.front()가 같지 않으면 location--를 해준다.(location == 0 이면, priorities.size() - 1을 해준다..!) 그 후 priorities.front()를 맨 마지막에 넣어준다. 만약 priorities.front()와 tmp.front()가 같고, location == 0이면 내가 요청한 문서가 프린터 되는 시점이다. 바로 return answer을 해주면 된다. 하지만 location != 0이면 내가 요청한 순서가..

해당 인덱스의 가격이 떨어지지 않은 기간을 세어주면 된다..! 프로그래머스에는 스택/큐로 구분이 되어있지만, 간단하게 for문으로 풀 수 있다고 생각을 하였다..! 이중 for문으로 i는 현재 가격의 위치, j는 i + 1로 시간을 세려고 하는 위치를 나타낸다. sec는 시간을 나타내고, 두번째 for문을 돌 때마다 sec++ 해준다. 그리고 prices[i]보다 prices[j]가 크면 break 해주고 탈출한다. 마지막에는 answer에 push 해주면 끝..! #include #include using namespace std; vector solution(vector prices) { vector answer; for(int i = 0; i < prices.size(); i++) { int sec..