목록Study/Algorithm (400)
hwooo
https://leetcode.com/problems/evaluate-reverse-polish-notation/description/풀이연산자를 가장 마지막에 표기하는 후위 표기법을 푸는 문제와 동일하다.숫자가 나오면 해당 값을 스택에 넣고, 연산자가 나오면 저장된 값 중 가장 최근 값 2개를 꺼내 계산 후 다시 삽입하는 방식으로 풀었다.코드class Solution {public: int evalRPN(vector& tokens) { stack nums; for (int i = 0; i
https://leetcode.com/problems/arithmetic-slices/풀이처음부터 끝까지 숫자를 비교하면서 차이가 같은 수가 3개가 된다면, 해당 값과 같은 차가 나오는 수가 나올 때까지 subarray의 원소 개수를 늘려준 후, subarray의 수를 구해 합한다.코드class Solution {public: int numberOfArithmeticSlices(vector& nums) { int ans = 0, i = 0; int size = nums.size(); if (size
https://leetcode.com/problems/minesweeper/description/ 풀이지뢰찾기를 구현하는 문제 클릭한 곳이 지뢰(M) -> 해당 셀만 변환클릭한 곳이 (E) - 인접한 셀에 지뢰 O -> 해당 셀만 주변 지뢰 개수 정보로 변환 - 인접한 셀에 지뢰 X -> 해당 셀 주변을 탐색하면서 변환 처음엔 탐색을 4방으로 했는데 8방으로 해야 했다. 코드 1시작하자마자 주변 지뢰의 개수를 전부 저장하는 배열을 만들었고, 클릭된 셀부터 BFS 탐색을 하며 값을 갱신 코드 2해당 풀이가 속도는 빠르나 메모리를 많이 사용하는 것 같아 탐색 중 필요할 때만 주변 지뢰의 개수를 세어 주어진 board의 값을 갱신하는 형태로 바꿈 -> 속도는 느려졌지만 메모리 사용량 감소코드 1class..
풀이DP 사용, 현재 가격에 대해 동전을 사용할 수 있는 상태라면 값을 갱신코드class Solution {private: #define MAX_VAL 100000public: int coinChange(vector& coins, int amount) { sort(coins.begin(), coins.end()); int cnt[10001]; // 최대 값으로 초기화 fill(cnt, cnt + 10001, MAX_VAL); cnt[0] = 0; for (int i = 0; i
https://leetcode.com/problems/single-number-ii/ 풀이답지를 봤다.떠오르는 풀이는 많았지만 시간, 공간복잡도의 제약조건이 있어 해당 방법들은 다 사용하지 못 했다.비트 연산으로 각 자리수마다 해당 숫자가 등장하는 횟수를 확인, 이를 3으로 나눴을 때 값이 존재한다면 이는 3번 나온 수에 포함되지 않으므로 해당 자리수를 답에 더한다.코드class Solution {public: int singleNumber(vector& nums) { int ans = 0; for (int i = 0; i > i & 1; cnt %= 3; ans |= cnt
https://leetcode.com/problems/triangle/submissions/ 풀이주어진 배열을 한 줄씩 순회하며, 윗 행에서 나올 수 있는 가장 작은 값을 현재 행에 더한다.코드class Solution {public: int minimumTotal(vector>& cal) { int height = cal.size(); // 윗 줄의 원소 중 가장 작은 원소의 값을 현재 행에 더 함 for (int i = 1; i
https://leetcode.com/problems/single-element-in-a-sorted-array/description/풀이이진탐색 사용하여 답이 현재 탐색 지점 기준으로 어디에 있는지 확인,인덱스 설정이 어려웠는데 start, end 지점을 두지 않아서 그랬던 거였음...코드 1start, end 지점 없음class Solution {public: int singleNonDuplicate(vector& nums) { int size = nums.size() / 2, idx = size; while (size > 0) { if (idx % 2) idx++; if (size % 2 && size..
https://leetcode.com/problems/longest-ideal-subsequence/description/풀이여러 방안을 생각해봤지만 다 답이 아니었고 결국 답을 확인했다.dp로 현재 문자에서 k 범위 내에서의 최대 부분수열 길이를 확인 후 갱신하는 풀이이다. 풀이를 봤을 때 이해는 했는데 실전이었다면 전혀 떠올리지 못 했을 것 같다.코드class Solution {public: int longestIdealString(string s, int k) { int dp[26] = {0, }, ans = 0; for (int i = 0; i