본문 바로가기

problem solving

(93)
[프로그래머스]K번째수 그저 지문을 따라서 풀면 되는 아주 쉬운 문제. #include #include #include using namespace std; vector solution(vector array, vector commands) { vector answer; vector temp; for(int i = 0; i
[프로그래머스]모의고사 mod를 이용해 각 유저의 답을 순회할 수 있도록 했다. 답 확인이 끝난 후 정답의 횟수에 따라 조건문을 진행함으로써 answer을 구했다. #include #include #include using namespace std; int user1[5] = { 1, 2, 3, 4, 5}; int user2[8] = { 2, 1, 2, 3, 2, 4, 2, 5 }; int user3[10] = { 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 }; vector solution(vector answers) { vector answer; int count[3] = { 0 }; for(int i = 0; i
[프로그래머스]완주하지 못한 선수 무작정 풀다보면 시간초과가 날 수 있는 문제다. 두 배열에서 같은 선수가 없다면 바로 return하면 되기 때문에 정렬을 해준다. 정렬된 배열에서 같은 이름을 가진 선수가 이어서 나온다면 다음 인덱스로 넘어가고 count++하여 두 배열에서 동명이인이 몇명인지 확인할 수 있도록 한다. 이름이 다르거나 동명이인의 수가 다르다면 리턴해서 결과를 얻으면 끝! #include #include #include using namespace std; string solution(vector participant, vector completion) { vector val; string answer = ""; sort(participant.begin(), participant.end()); sort(completion...
[프로그래머스]124나라의 숫자 3으로 나눈 나머지를 더하는 방식으로 진행하면 결과를 도출할 수 있다. 124숫자를 사용해야 하므로 3으로 나눈 나머지의 경우인 0, 1, 2에서 0은 4로 변환해서 사용해준다. 하지만 여기서 문제점이 발생하는데 나머지가 0으로 나올 때 값이 정확히 떨어지지 않는다. 1, 2, 4 세가지 수가 연속으로 나올 때 몫이 같야야 순회가 되는데 4일 때는 3으로 딱 떨어져서 몫이 1, 2일 때보다 +1되는 걸 볼 수 있다. 그래서 주어진 값을 나눈 후 나머지가 0일 때(변환하면 4)는 -1을 해야 정상적인 결과를 볼 수 있다. #include #include using namespace std; string solution(int n) { string answer = ""; while(n > 0) { int t..
[프로그래머스]다리를 지나는 트럭 처음에 무작정 풀려하다가 삽질만 한 거 같다. 결론적으로 큐를 이용해서 풀면 쉽게 풀 수 있는데 딱히 어려운 부분은 없다. #include #include #include #include using namespace std; int solution(int bridge_length, int weight, vector truck_weights) { int answer = 0; queue mQ; int seq = 0; int time = 1; int total_weights = 0; mQ.push({seq, time}); total_weights += truck_weights[seq++]; while(!mQ.empty()) { if(time - mQ.front().second + 1 >= bridge_leng..
[프로그래머스]멀쩡한 사각형 y, x축의 값이 정수가 나타날 때의 간격이 일정하다는 것 제외해야할 칸의 개수가 각각의 정수 사이의 y, x거리의 합 -1이란 것을 알면 문제를 해결할 수 있다. (단! 범위를 초과하여 ac를 못 받을 수 있으면 주의하자) using namespace std; long long solution(int w,int h) { long long answer = (long long)w * (long long)h; int div = w > h ? h : w; while(w % div != 0 || h % div != 0) { div--; } answer = answer - (div * (w / div + h / div - 1)); return answer; } Colored by Color Scripter cs
2186번: 문자판 시간초과 해결하는데 상당히 힘들었던 문제입니다. 백트래킹과 비슷한 방식을 사용하는데 DP방식과 섞는 느낌?으로 DFS를 구성하면 답을 구할 수 있습니다. #include #include #include typedef struct { int y, x; } dif; dif dir[4] = { {1, 0}, {-1, 0}, {0, 1}, {0, -1} }; int visited[101][101][101] = { 0 }; std::string map[101]; std::string result; int row, col, term; int DFS(int y, int x, int idx) { if(visited[y][x][idx - 1] != -1) { return visited[y][x][idx - 1]; } v..
2133번: 타일 채우기 문제를 보고 자신감이 떨어져 다른 분이 작성한 답을 참고했다.... https://jaimemin.tistory.com/330 백준 2133번 타일 채우기 문제 링크입니다: https://www.acmicpc.net/problem/2133 타일링 문제가 상당히 흥미로웠기 때문에 백준 알고리즘 문제를 한번 풀어봤습니다. 알고스팟에서 익혔던 방법대로 풀었더니 쉽게 풀렸습니다! (http://ja.. jaimemin.tistory.com https://www.crocus.co.kr/688 [2133번] 타일 채우기 문제 출처 : https://www.acmicpc.net/problem/2133 알고리즘 분석 : 문제 해결에 필요한 사항 1. Dynamic Programming 2. 점화식 세우는 방법 상태 다..