목록알고리즘 (547)
N
우선 answer에 s.size()를 넣어주어 최댓값으로 설정한다..! 이중 for문 중에서 첫 번째 for문은 자를 문자의 개수를 나타낸다. cnt 변수는 같은 문자의 개수를 나타내고, tmp 변수는 압축한 문자열의 총 크기를 나타낸다. current 문자열은 s[0] ~ s[i]개 까지 자른 문자열을 나타낸다. 두 번째 for문에서는 s 문자열에서 current와 같은 문자열이 있는지 확인하는 반복문이다. current == s.substr(j, i)가 같다면 cnt++을 해준다. 만약 두 문자열이 같지 않다면 tmp에 자른 문자열의 길이를 더해준다. 이때, cnt가 1이라면 자른 문자열의 길이만 더해주고, 1이 아니라면 cnt를 문자열로 변환했을 때의 길이 + 자른 문자열의 길이를 더해준다. (같은..
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..
큐 형태를 생각하면서 풀면 되는 문제..! 큐를 선언하면 되지만 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..
sort를 이용하여 푸는 문제..! 우선 을 include 하여 sort를 쓰도록 하자..! sort는 기본적으로 오름차순 정렬이기 때문에 sort(d.begin(), d.end());만 써주면 된다..! 그리고 int형 변수 sum을 선언한다. for문을 통해 sum + d [i]가 budget보다 작으면 더하여 answer++을 해주고, 더한 값이 budget보다 크다면 바로 answer를 리턴한다..! easy..! #include #include #include #include #include using namespace std; int solution(vector d, int budget) { int answer = 0, sum = 0; sort(d.begin(), d.end()); for(in..
이중 for문 사용에 관한 문제다...! 아마 c언어를 배울 때, 특히 for문에 대해 배울 때 많이 봤던 문제일 수도 있다..! 바로 이중 for문을 이용하여 별표를 찍는 것..! 많이 어렵지 않아서 설명도 딱히 필요 없을 것 같다..! 만약 어렵게 느껴진다면 a와 b를 작은 수로 잡아서 직접 손으로 따라가는 것도 괜찮은 방법 같다..! #include using namespace std; int main(void) { int a; int b; cin >> a >> b; for(int i = 0; i < b; i++) { for(int j = 0; j < a; j++) { cout