목록Study/Algorithm (400)
hwooo
https://leetcode.com/problems/time-needed-to-rearrange-a-binary-string/ 풀이 문제에서 요구한 방식대로 코드를 구현하였다.문자열을 순회하며 "01"을 찾으면 "10"으로 바꾸는 과정을 더 이상 "01"이 없을 때까지 반복하였다. DP로 푸는 방식도 있었지만 잘 이해가 되지 않아 코드만 올려두었다. 코드 class Solution { public: int secondsToRemoveOccurrences(string s) { int cnt = 0; while (1) { bool isChanged = false; int i = 0; while (i < s.size()) { // "01" 이라면 "10"으로 바꾸고 idx + 2 if (s[i] == '0'..
https://school.programmers.co.kr/learn/courses/30/lessons/135807 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 각 배열을 순회하며 최대공약수를 구한다.이 때 하나의 원소에 대해서라도 최대공약수가 없다면 해당 배열 전체를 나눌 수 있는 수는 존재하지 않음으로 바로 탐색을 중단했다. 각 배열의 공약수로 다른 배열을 순회하며 나눠지는 수가 있는지 판단 후 큰 걸 반환했다.이 때 두 공약수 중 더 큰 값으로 먼저 비교를 수행해서 시간을 줄이려 했다. 코드 #include #include #include u..
https://school.programmers.co.kr/learn/courses/30/lessons/133499# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 dp + 메모이제이션으로 풀었다. 문자열 babbling의 인덱스를 하나씩 옮겨가며 해당 위치에서 옹알이에 일치하는 단어가 있는지 확인하고, 있다면 check 배열을 true로 바꿔준다. check 배열이 true라면 해당 위치까지는 옹알이 배열에 있는 문자열로 이루어져 있다는 뜻이므로, 그 자리부터 옹알이 배열을 탐색한다면 결국 전체 문자열이 옹알이 배열에 있는 문자열로 이루어져 있음을..
https://leetcode.com/problems/time-needed-to-buy-tickets/ 풀이 - 코드 1 단순하게 deque을 사용해서 문제의 상황을 순환했다. 이 때 티켓의 개수가 0이라면 큐에서 빠져나가게 했다. - 코드 2 해답을 보고 한 번 더 풀었다. k의 앞 원소들에서는 가장 작은 개수만큼 공통적으로 순회한다. 첫 반복문이 k까지 순회하므로 k 횟수만큼은 다 순회한다.두 번째 반복문에서는 k 이후의 원소를 순회하는데, 이 때 k가 티켓을 다 샀다면 k 뒤의 원소는 k 앞의 원소보다 1번씩 덜 순회하므로 반복문 실행 전에 값을 1 빼주고 순회를 수행했다. 코드 1 class Solution { public: int timeRequiredToBuy(vector& tickets, i..
https://leetcode.com/problems/minimum-remove-to-make-valid-parentheses/ 풀이 열린 괄호와 닫힌 괄호를 관리하는 스택을 따로 두고, 괄호를 만날 때마다 저장했다.열린 괄호를 만남 - open스택에 저장닫힌 괄호를 만남 - open 스택에 값이 있다면 해당 괄호 삭제, 값이 없다면 close 스택에 저장문자열을 다 순회한 후 스택에 남아 있는 위치의 괄호들은 삭제해야 할 괄호이므로 이를 모두 동일한 문자로 만들어 준 후 문자열에서 삭제했다. 코드 #define DEL -1 class Solution { public: string minRemoveToMakeValid(string s) { int cnt = 0; stack openLoc, closeLoc..
https://leetcode.com/problems/number-of-students-unable-to-eat-lunch/ 풀이 - 코드 1 (5ms, 11MB) deque 자료형을 사용, 샌드위치를 먹을 수 있는 학생이 나올 때까지 학생을 순회했다.이 때 모든 학생들을 탐색했다면 먹을 수 있는 샌드위치가 없으므로 반복문을 종료하고, 아닌 경우에는 학생과 샌드위치를 하나씩 없앤다. - 코드 2 (2ms, 10MB) 원하는 샌드위치를 먹고 싶은 학생이 있다면 stack을 돌 때 찾을 수 있을테니, 원하는 샌드위치를 가진 학생이 없을 때까지 탐색 후 남은 샌드위치의 개수를 반환했다. 코드1 class Solution { public: int countStudents(vector& students, vect..
https://leetcode.com/problems/valid-parenthesis-string/submissions/ 풀이 '('의 개수에 따라 *을 다르게 해석하려고 했으나 *의 위치 처리를 어떻게 해야 하는지 몰라서 막혔었다. 해당 알고리즘으로는 컨테이너에 '('과 '*'의 위치를 저장하고 이를 비교하면 됐었다. 하지만 더 좋은 풀이를 찾아서 해당 방법으로 풀었다. 해당 풀이는 열린 괄호 개수의 최대(cmax)/최소(cmin) 값을 이용한 풀이로, 괄호가 나올 때마다 cmin/cmax 값을 조정했다. 이 때 '*'은 어떤 식으로 쓸지 모르니 cmax++ (열린 괄호로 쓸 경우) / cmin-- (닫힌 괄호로 쓸 경우) 를 모두 고려했다. 매 탐색마다 cmax < 0 이라면 열린 괄호 개수 < 닫힌..
https://school.programmers.co.kr/learn/courses/30/lessons/42586# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 각 프로세스의 기능 개발이 끝나는 날짜를 벡터에 순서대로 저장, 인덱스가 프로세스의 넘버가 되게 했다.해당 벡터를 앞에서부터 순회하며 현재 프로세스의 개발을 마친 시점에서 그 전에 개발을 마친 프로세스의 개수를 세면 해당 숫자가 한 번 배포될 때의 프로세스 수가 된다.이를 프로세스 수만큼 반복한다.이 때, 첫 번째 프로세스를 기준점으로 삼아 전체 프로세스 개수가 1개일 경우는 예외처리를 해..