본문 바로가기

전체 글

(12)
[LeetCode] 4. Median of Two Sorted Arrays (Hard) 처음으로 푼 Hard 문제입니다. sorting된 두 개의 배열에서 median값을 찾아내는 문제입니다. total index를 하나 두고, 두 개의 배열에서 더 작은 값을 비교하여 total index를 증가시켰습니다. total index가 중앙 index가 될 때, 해당 index의 값을 median값으로 구하였습니다. 현재 풀이는 시간복잡도가 O(m+n)인데, 해당 문제에서 요구하는 O(log(m+n))이 되는 다른 풀이도 추가할 예정입니다. O(log)가 되려면 바이너리 방식으로 비교해야 할 것 같습니다. (문제에서 요구하는 시간복잡도를 충족하지 않는데도 pass가 되네요. 시간복잡도를 만족하지 않는 풀이는 사실상 난이도 Hard라고 보기는 어려울 것 같습니다ㅠㅠ. 처음 푼 Hard 문제가 생각..
[LeetCode] 14. Longest Common Prefix (Easy) 문자열의 배열에서 가장 긴 공통의 prefix를 찾아내는 문제입니다. class Solution { public: string longestCommonPrefix(vector& strs) { string answer = strs[0]; for(int i=0;i
[LeetCode] 7. Reverse Integer (Medium) 입력된 int를 반전시킨 int를 결과로 출력하는 문제입니다. 이 때, 반전시킨 int값이 integer의 범위인 [-2³¹, 2³¹-1]에 포함되지 않을 경우 0을 출력해야합니다. class Solution { public: int reverse(int x) { int maxInt = INT_MAX; int minInt = INT_MIN; int reverse = 0; vector nums; if (x
[LeetCode] 6. Zigzag Conversion (Medium) 입력된 string을 지그재그 패턴으로 만들고 차례대로 읽었을 때의 결과를 출력하는 문제입니다. class Solution { public: string convert(string s, int numRows) { string answer; if(numRows == 1) return s; for(int i=0;i
[LeetCode] 9. Palindrome Number (Easy) palindrome은 앞에서부터 읽는 것과 뒤에서부터 읽는 것이 같다는 의미입니다. 입력된 숫자가 palindrome인 숫자인지 확인하는 문제입니다. 음수일 경우, -가 앞에 붙어있기 때문에 palindrome이 될 수 없습니다. 양수일 경우, 입력된 숫자의 자리수를 구하고 맨 앞과 맨 뒤에서부터 차례대로 같은 숫자인지 확인하였습니다. class Solution { public: bool isPalindrome(int x) { if(x =1) { numCount++; } for(int i=0;i < numCount/2;i++) { if( int(x/pow(10,i))%1..
[LeetCode] 3. Longest Substring Without Repeating Characters (Medium) 반복되는 문자가 없는 가장 긴 substring을 구하는 문제입니다. hash를 사용하여, 앞에서부터 차례대로 true 처리를 해주었습니다. hash에서 이미 true가 된 문자가 나올 경우, maxLen을 갱신해주었고 앞 글자를 제외하여 다시 for문을 돌도록 하였습니다. 이 때, 앞 글자에서부터 차례대로 확인하지 않고, 이전 for문에서 확인된 부분까지는 건너뛰고 그 다음부터 확인하도록 하였습니다. class Solution { public: unordered_map map; int lengthOfLongestSubstring(string s) { int maxLen = 0; int len = 1; for(int i=0;i maxLen) ? len:maxLen; } return maxLen; } };
[LeetCode] 2. Add Two Numbers (Medium) Linked list로 저장된 두 개의 숫자 배열 합을 구하는 문제입니다. 두 개의 숫자 배열이 길이가 다를 수 있기 때문에, 둘 중 하나라도 마지막 노드가 아닐 경우 다른 쪽 숫자 배열에 새로운 노드를 추가했습니다. /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: ListNode* ..
[LeetCode] 1. Two Sum (Easy) 숫자 배열에서 합하여 target이 되는 두 숫자의 indices를 출력하는 문제입니다. brute force로 이중 for문을 사용하였습니다. class Solution { public: vector twoSum(vector& nums, int target) { vector answer; for(int i=0; i