Computer Science
-
프로그래머스 Lv3 선입 선출 스케줄링(복습필요)Computer Science/프로그래머스 2023. 10. 16. 17:41
문제 해석 n 처리해야 할 작업의 개수 cores 각 코어의 처리시간이 담긴 배열 cores에 담긴 시간이 경과 할 때 처리 작업의 개수를 하나씩 줄여나간다. (2개 이상의 코어가 남을 경우) 접근법 완전 탐색의 경우 BigO(n * 코어의 개수) 이므로 시간 초과가 발생한다. 따라서 Parametric Seach를 이용해야한다. 1. 파라메트릭 서치란? 파라메트릭 서치는 최적화 문제를 결정 문제로 바꾸어 풀어 나가는 기법입니다. 여기서 결정 문제란 'yes' or 'no' 즉 '예' 또는 '아니오:로 답하는 문제를 말합니다. 파라메트릭 서치는 주로 특정 조건을 만족하면서 동시에 가장 적합한 변숫값을 찾아나가는 문제에서 활용되며, 이진 탐색(Binary Search)을 이용하여 구현합니다. 예를 들어, ..
-
프로그래머스 Lv3 거스름돈Computer Science/프로그래머스 2023. 10. 16. 15:35
접근법 "정답이 커질 수 있으니, 1,000,000,007로 나눈 나머지를 return 해주세요." 라는 문구를 보고 완전 탐색은 배제해야하는 문제이다. 따라서 DP로 접근해야하는데, 예를 들어서 손님께 5원을 거슬러 줘야하고 1원, 2원, 5원이 있다면 다음과 같이 4가지 방법으로 5원을 거슬러 줄 수 있습니다. 1원은 5개를 사용해서 거슬러 준다. 1원을 3개 사용하고, 2원을 1개 사용해서 거슬러 준다. 1원을 1개 사용하고, 2원을 2개 사용해서 거슬러준다. 5원을 1개 사용해서 거슬러준다. 예시를 보고 3원을 구하는 경우의 수를 볼 때 3원 = 1원 + 1원 + 1원3원 = 1원 + 2원3원 = 2원 + 1원이렇게 경우의 수가 순서에 따라 달라질 수 있으므로 순서에도 신경을 써야하는 문제이다. ..
-
프로그래머스 Lv3 가장 긴 팰린드롬Computer Science/프로그래머스 2023. 10. 15. 20:24
문제 풀이 해당 문제는 인덱스 접근을 통해서 풀었다. 전체 문자열을 반복하면서 패린드롬을 구하는 포인터를 다르게 하면서 홀수인 경우와 짝수인 경우의 팰린드롬을 나눠서 구했고 최대값을 저장했다. for(int i = 0; i < s.size(); ++i) { int odd = isPalindrome(s, i, i); int even = isPalindrome(s, i - 1, i); int ismax = max(answer, odd); answer = max(ismax, even); } 포인터로부터 left는 감소 right는 증가시켜나가며 문자열이 같은지 확인했다. 문자열의 길이는 right - left -1 이다. ex) 7 - (-1) -1 int isPalindrome(string s, int le..
-
프로그래머스 Lv3 몸짱 트레이너Computer Science/프로그래머스 2023. 10. 12. 13:50
https://school.programmers.co.kr/learn/courses/30/lessons/1838 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 1. 헬스장의 예약 내역이 주어졌을때, 구현을 통해서 구하는 것이 아닌, 회원수가 최대인 구간만 구하게 되면 나머지는 회원수가 최대인 시간의 배열의 부분 집합으로 구할 수 있습니다. 2. priority_queue를 사용하여, 그리디하게 회원수가 최대인 시간을 구해주었으며, 3. 문제의 핵심인 락커의 위치를 구할떄는 락커의 각 부분배열을 완전탐색으로 구해주어, 시간내에 문제를 해결할 수 있었습니다...
-
프로그래머스 Lv3 GPSComputer Science/프로그래머스 2023. 10. 12. 10:56
https://school.programmers.co.kr/learn/courses/30/lessons/1837 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이 문제는,,,너무 어려웠다,,, 처음에는 다익스트라로 풀고, 처음부터 마지막 경로까지 가는데 막힌 부분이 있다면 로그를 확인해서 경로를 수정하는 방법으로 풀려고 했다. 하지만 위 풀이는 막히기 전에 경로를 수정할 때 해결을 하기가 어려웠다. 다른 사람들은 dp(dynamic programming)으로 풀었다. 현재 시간에 모든 거점에서 이전 시간의 모든 거점과 이전 시간의 거점에서 연결 된 거점들..
-
프로그래머스 Lv2 리틀 프렌즈 사천성Computer Science/프로그래머스 2023. 10. 10. 13:01
이 문제는 bfs로 풀어야한다 생각은 했다. 1. map을 만들어서 각 케릭터에 대한 좌표 값을 모아둔다. 2. 타일이 모두 빌 때 까지 반복문을 돌리고, 반복문 안에서는 타일에 대해 순회한다. 이 때 타일을 한번 순회 했는데 한번도 케릭터를 제거하지 못하면 실패 처리한다. 3. 순회를 하는 코드는 케릭터의 시작 위치를 가져오고 제일 먼저 4개의 주변 방향을 큐 안에 넣는다. 이 때 "위치, 이동 방향, 꺽은 적이 있는지"를 확인 할 수 있는 데이터를 같이 넣어준다. #include #include #include #include #include #include using namespace std; struct pos { int m; //m 좌표 int n; //n 좌표 int r; //이동 방향 boo..
-
프로그래머스 카카오캠핑 Lv2Computer Science/프로그래머스 2023. 10. 9. 19:53
나는 이 문제를 2차원 배열을 x좌표에 대해서 오름차순으로 정리했다. 그러면 위와 같은 사각형 꼴로 정렬이 된다. (정확하게는 y축도 정렬을 해주긴 해야한다) 첫번째로 (1, 1)을 선택하고 이후에 있는 (3, 2) 를 선택 후 (2, 2)가 범위 안에 있는지 검사하는 꼴로 문제를 풀면된다. (1, 1)을 선택하고 이후에 있는 (3, 2) 를 선택 이 부분의 구현은 min max 함수를 사용하고 행과 열이 일치하는 좌표가 있는지 검사하면된다. for(int i=0; i
-
프로그래머스 Lv 보행자 천국Computer Science/프로그래머스 2023. 10. 9. 18:38
나는 이 문제를 dfs로 접근했다. 각 칸을 경로로 생각하고 1. 0을 만나면 2방향을 모두 탐색 2. 1을 만나면 탐색 중지 3. 2를 만나면 이전 방향이 오른쪽 진행이면 오른쪽으로 이동 아래로 진행이면 아래로 이동 하도록 코드를 짰다. 하지만 코드를 실행하면 실패가 떴다.. 코드는 아래와 같다. #include #include using namespace std; int MOD = 20170805; bool visit[501][501]; void dijkstra(int x, int y, int m, int n, const vector& city_map, int dir, int* dx, int* dy, int& answer) { if(y == m - 1 && x == n - 1) { ++answer; ..