profile
Hello, Devs!
post-thumbnail

[ LeetCode ] 205 Isomorphic Strings

📌 Problem 동일한 길이 두 문자열이 주어졌을 때 문자열 s를 문자열 t로 변환할 수 있는지 확인하면 된다. 변환하는 방법은 다음과 같다. 📌 Solution Map과 Set을 통해 변환 가능 여부를 확인하면 한 문자씩 변환한다. 문자열 s의 문자들을 하나씩 탐색할 때 다음과 같이 탐색한다. 📌 Code

2023년 7월 18일
·
1개의 댓글
·
post-thumbnail

[ LeetCode ] 202 Happy Number

📌 Problem 1 이상의 정수가 주어졌을 때 정수의 각 자리별 제곱수의 합을 반복한다. 이 때 최종적으로 1이 될 수 있는 정수이면 true를 반환하고 그렇지 않다면 false를 반환한다. 예를 들어 19는 19 - 82 - 68 - 100 - 1 으로 변환하기 때문에 true를 반환한다. 반면에 2는 2 - 4 - 16 - 37 - 58 - 89 - 145 - 42 - 20 - 4으로 되면서 절대로 1이 되지 않기 때문에 1을 반환한다. 📌 Solution 무한 loop를 통해 계속해서 정수를 변환한다. 이 때 이전에 한 번이라도 나온 정수는 메모리에 저장한다. 이 과정 속에서 1이 나오면 true를 반환하고 메모리에 저장된 정수가 나오면 false를 반환한다. 📌 [Code](https://github.com/codesver/leetcode-solution-hub

2023년 7월 17일
·
0개의 댓글
·
post-thumbnail

[ LeetCode ] 171 Excel Sheet Column Number

📌 Problem 168번 문제를 거꾸로 해석하는 문제이다. 하나의 알파벳 대문자 문자열이 주어졌을 때 여기에 대응되는 값을 반환하면 된다. 📌 Solution 해결 방법은 매우 간단하다. 26진수라고 생각하고 풀면 된다. 다만, 0을 나타내는 값이 없으며 1 ~ 26이 A ~ Z으로 대응된다. GAS라는 문자열이 주어지면 거꾸로 S부터 계산하면 된다. S는 1의 자리수 이기 때문에 $26^0 * S$으로 해석할 수 있으며 S는 19이다. A는 26의 자리수이기 때문에 26 * 1로 26이다. G는 26 x 26의 자리수이기 때문에 26 x 26 x 7으로 4732가 된다. 3 숫자를 모두 더하면 4777이 된다. 📌 [Code

2023년 7월 11일
·
0개의 댓글
·
post-thumbnail

[ LeetCode ] 169 Majority Element

📌 Problem 정수 숫자 배열이 주어졌을 때 가장 많이 포함된 정수를 반환하면 된다. 이때 배열의 절반 길이 보다 많이 있으면 가장 많이 포함된 정수이며 해당 정수는 항상 배열의 절반 길이 보다 많이 있다. 📌 Solution Map을 사용해서 배열을 순차적으로 탐색하며 정수의 개수를 증가시키면 된다. 다만, 중간에 최적화를 할 수 있는데 배열의 절반 길이보다 많아진 정수가 있으면 바로 반환하면 된다. 📌 Code

2023년 7월 8일
·
0개의 댓글
·
post-thumbnail

[ LeetCode ] 168 Excel Sheet Column Title

📌 Problem A -> 1 ... Z -> 26이다. 또한 AA -> 27 ... ZZ -> 702이다. 정수가 주어졌을 때 이를 알파벳으로 나타내면 된다. 📌 Solution A = 0이고 Z = 25이면 간단하게 26진수를 구하는 방법으로 계산할 수 있다. 하지만 이 문제에서는 0이 존재하지 않는다. 그렇기 때문에 나머지가 0이 나올 때는 몫에서 1을 빼서 Z로 변환하면 된다. 📌 Example 52 to AZ 52를 26으로 나눈 나머지는 0이다. 이 문제에서는 0과 맞는 알파벳이 없기 때문에 몫인 2에서 1을 빼와서 Z로 변환한다. 이제 남은 몫 1을 다시 26으로 나눈 나머지가 1이기 때문에 이를 A로 변환하여 최종적으로 AZ가 된다. 701 to ZY 701을 26으로 나눈 나머지는 25이다. 25는 Y으로 변환된다.

2023년 7월 6일
·
0개의 댓글
·
post-thumbnail

[ LeetCode] 3 Longest Substring Without Repeating Characters

📌 Problem 문자열이 주어졌을 때 중복되는 문자 없이 만들 수 있는 최장 길이의 부분 문자열의 길이를 구하면 된다. 이때 부분 문자열은 연속된 문자들이다. 📌 Solution 각각의 문자들을 앞에서부터 차례대로 탐색을 한다. 탐색한 문자는 앞에서부터 이어진 문자열의 마지막 문자이다. 만약 앞에서부터 이어진 문자열에 현재 탐색한 문자가 포함되어 있다면 문자열에서 중복 문자 이후부터로 문자열을 자른다. 예를 들어 abca를 보자. 4번째 문자인 a를 탐색할 때 앞에서부터 이어진 문자열은 abc이다. 이때 중복 문자인 a가 있기 때문에 이를 다음 문자인 b부터 해서 bc로 문자열을 자른다. 그리고 현재 문자인 a를 뒤에 붙여서 bca를 만든다. 이를 문자열로 구현할 수도 있지만 Map을 통해 구현할 수도 있다.

2023년 7월 5일
·
0개의 댓글
·
post-thumbnail

[ LeetCode ] 121 Best Time to Buy and Sell Stock

📌 Problem 0 이상 10,000 이하의 숫자가 담긴 100,000 이하 크기의 배열이 주어진다. Index가 오름차순인 순서대로 stock이 변한다고 하였을 때 최대의 이익을 남기려고 한다. 예를 들어 [7,1,5,3,6,4]이 주어졌을 때 1일 때 구매하여 6일 때 판매를 하여야 가장 큰 이익을 남길 수 있다. 만약 이익을 남길 수 없다면 0을 반환한다. 📌 Solution Index를 순서대로 조회하면서 현재까지 조회한 stock과 현재 조회한 stock의 차이를 구한 후 현재 계산한 최대 이익보다 크면 업데이트를 한다. 📌 Code

2023년 7월 5일
·
0개의 댓글
·
post-thumbnail

[ LeetCode ] 119 Pascal's Triangle II

📌 Problem 위의 그림은 5층짜리 파스칼 삼각형이다. 맨위를 0층이라고 했을 때 주어진 높이의 숫자 배열을 반환하면 된다. 높이 3이 주어지면 [1, 3, 3, 1]을 반환하면 된다. 📌 Solution 파스칼 삼각형을 만드는 방법은 이전 층을 활용하는 것이다. 양끝에 1을 두고 이전 층의 이웃한 숫자들의 합들을 중간에 넣으면 된다. [1, 2, 1]의 이웃한 숫자들의 합들은 [3, 3]이고 양끝에 1을 두면 [1, 3, 3, 1]이 되면서 다음층을 만들게 된다. 0층을 [1]으로 두고 주어진 높이에 맞게 다음층을 생성하여 반환하면된다. 📌[Code](https://github.

2023년 7월 4일
·
0개의 댓글
·
post-thumbnail

[ LeetCode ] 118 Pascal's Trianlge

📌 Problem 위의 그림과 같이 위의 층을 바탕으로 새로운 층을 만드는 것을 파스칼 삼각형이라고 한다. 높이가 주어졌을 때 만들어지는 파스칼 삼각형의 층별 숫자를 배열로 만들어서 반환하면 된다. 예를 들어 높이 3이 주어지면 [[1], [1, 1], [1, 2, 1]]를 반환하면 된다. 높이는 최소 1층에서 30층까지 주어진다. 📌 Solution 최소 1층은 주어지기 째문에 [[1]]은 기본값으로 가지고 있는 배열을 만든다. 이후 주어진 높이 - 1 만큼 다음 층을 만든다. 이 때 이전 층의 양끝에 0이 있다고 가정하고 이웃한 숫자끼리 더해서 새로운 배열을 생성한다. 예를 들어 2층은 1층 [1]

2023년 7월 4일
·
0개의 댓글
·
post-thumbnail

[ LeetCode] 58 Length of Last Word

📌 Problem 문자열은 영문자와 공백으로만 이루어져 있다. 공백을 제외한 마지막 단어의 길이를 반환하면 된다. 📌 Solution 문자열의 마지막 공백 문자열을 제거하고 마지막 문자열의 길이를 반환하면 된다. 📌 Code

2023년 7월 4일
·
0개의 댓글
·
post-thumbnail

[ LeetCode ] 21 Merge Two Sorted Lists

📌 Problem 주어진 2개의 정렬된 연결 리스트를 하나의 정렬된 연결 리스트로 병합하여 반환하면 된다. 이 때 연결 리스트는 언어에서 제공하는 연결 리스트(Java나 Kotlin에서는 LinkedLIst) 클래스가 아니라 주석에 표현되어 있는 연결 리스트를 사용한다. 📌 Solution LinkedList collection 만약 언어에서 제공하는 연결 리스트를 사용했다면 굉장히 쉽게 구현이 가능했을 것이다. 하지만 직접 제공한 연결 리스트를 사용하기 때문에 구현 방법을 생각해야 한다. 그렇다고 크게 어렵지는 않다. 각각의 list에 있는 node를 차례대로 탐색하면서 더 작은 값을 가진 node를 결과 리스트에 우선 삽입하면 된다. ans는 0을 값으로 가진 결과 리스트이다. 이후 반환을 할 때는 두 번째 node부터 반환을 한다. node는

2023년 7월 4일
·
0개의 댓글
·
post-thumbnail

[ LeetCode ] 13 Roman to Integer

📌 Problem 이 문제는 로마 숫자를 아라비아 숫자로 변환하는 문제이다. 📌 Solution 로마 숫자에는 I, V, X, L, C, D, M가 존재하며 각각 1, 5, 10, 50, 100, 500, 1000을 뜻한다. 하지만 두 문자를 조합하여 다른 숫자를 만들 수 있으니 한 문자씩 변환하면 안된다. 두 번째 문자부터 확인하면서 이전 문자와의 조합을 확인하면 된다. 조합이 가능한 문자이면 두 문자를 합쳐서 아라비아 숫자로 변환하고 조합이 안되면 이전 숫자만 아라비아 숫자로 변환하면 된다. 예를 들어 IVXI가 있다고 해보자. 두 번째 문자는 V이다. 이전 문자는 I로 IV는 조합이 가능한 경우이다. 그렇기 때문에 IV를 4로 변환한다. 문자 2개가 변환되었기 때문에 2개를 뛰어서 4번째 문자인 I를 탐색한다. I는 X와 조합이 불가능하기 때문에 X만 10으로 변환

2023년 7월 4일
·
0개의 댓글
·
post-thumbnail

[ LeetCode ] 9 Palindrome Number

📌 Problem Palindrome 숫자는 중앙을 기준으로 좌우 대칭인 수를 뜻한다. 이 문제에서는 음수까지 처리하며 음수는 맨 앞에 -가 있기 때문에 절대로 palindrome 숫자가 될 수 없다. 📌 Solution 맨 앞과 맨 뒤를 차례대로 탐새가면서 비교할 수도 있지만 사실 단순히 문자열로도 처리할 수 있다. Kotlin에서는 reversed() 함수로 문자열을 바로 뒤집을 수 있다. 📌 Code

2023년 7월 4일
·
0개의 댓글
·
post-thumbnail

[ LeetCode ] 22 Generate Parentheses

📌 Problem 소괄호 ()가 n개의 쌍을 이룰 수 있는 모든 경우를 구하면 된다. 예를 들어 n = 1이면 ()만 가능하고 n = 2이면 ()(), (())이 가능하다. n은 1이상 8이하이다. 📌 Solution 백트래킹 방식으로 해결할 수 있다. 백트래킹을 할 때는 쌍이 이루어짐을 확인할 수 있는 stack과 왼쪽 오른쪽 소괄호 사용 가능 개수 그리고 현재까지의 사용 기록을 넘기면 된다. 모든 소괄호를 사용하였으면 현재까지의 기록을 결과에 추가하면 된다. "("를 사용할 수 있는 경우는 "("의 남은 개수가 ")"가 남은 개수 이하이면서 0이 아닐 때이다. ")"를 사요할 수 있는 경우는 "("의 남은 개수가 ")"가 남은 개수 미만이면서 stack의 top이 "("일 때다. 📌 [Code](https://github.com/codesver/l

2023년 6월 23일
·
0개의 댓글
·
post-thumbnail

[ LeetCode ] 17 Letter Combinations of a Phone Number

📌 Problem 폰 자판기를 누르면 알파벳을 입력할 수 있다. 알파벳은 2번부터 9번 자판에 존재한다. 각각의 자판은 순서대로 a부터 3개의 알파벳을 가지고 있으며 7, 9번만 4개를 가진다. 최대 4의 길이를 가진 자판이 주어질 때(2 ~ 9까지의 숫자가 문자열로 이어짐) 순서대로 가능한 알파벳 목록을 반환하면 된다. 이때 자판을 누르면 랜덤한 알파벳이 나온다고 가정한다. 예를 들어 "23"이 주어지면 ["ad","ae","af","bd","be","bf","cd","ce","cf"]가 가능하다. 📌 Solution 최대 4의 길이만 주어지고 자판의 개수도 8개이기 때문에 단순 반복문으로 해결이 가능하다. 자판을 누르는 순서대로 기존에 있는 경우의 수에 현재 자판의 알파벳들을 하나씩 더하면 된다. 📌 [Code](https

2023년 6월 22일
·
0개의 댓글
·
post-thumbnail

[ LeetCode ] 12 Integer to Roman

📌 Problem 1이상 4000미만의 정수를 로마 숫자로 변환하면 되는 문제이다. 📌 Solution 만약 두 개의 문자를 합쳐서 생각할 수 없다면 이 문제는 굉장히 간단해진다. 가장 큰 로마 숫자인 M부터 시작하여 가장 작은 로마 숫자인 I까지 차례대로 나누기를 하였을 때 몫만큼 문자열을 만들면 된다. 예를 들어 3999는 1000 x 3 + 500 + 100 x 4 + 50 + 10 x 4 + 5 + 1 * 4로 나타낼 수 있다. 이를 로마 숫자로 나타내면 MMMDCCCCLXXXXVIIII이다. 하지만 로마 숫자에는 2개의 문자를 합쳐서 하나로 생각하는 경우가 있다. 그렇기 때문에 문제가 복잡하다고 느낄 수 있다. 그렇다면 그냥 2개의 문자도 하나의 경우의 수로 생각하면 된다. 즉, 다음과 같이 문자의 개수를 늘린다. M, CM, D, CD, C, XC, L, XL

2023년 6월 20일
·
0개의 댓글
·
post-thumbnail

[ LeetCode ] 28 Find the Index of the First Occurrence in a String

Link | LeetCode 28번 문제 : Find the Index of the First Occurrence in a String 📌 About 문자열을 다루는 문제이다. 문자열에서 indexOf()를 이해하고 있으면 쉽게 해결이 가능하다. string.indexOf(String)은 string에서 String의 시작 index를 찾으며 없으면 -1을 반환한다. 📌 Code GitHub Repository

2023년 3월 27일
·
0개의 댓글
·
post-thumbnail

[ LeetCode ] 27 Remove Element

Link | LeetCode 27번 문제 : Remove Element 📌 About 이 문제는 Custom Judge 문제로 몇 가지를 따라야한다. 요약하자면 주어진 nums의 앞에서부터 val들을 뒤로 옮긴다.. 그리고 val이 아닌 숫자들의 갯수를 반환하면 된다. 예를 들어 [1, 1, 2, 3, 3, 4, 4, 4]이고 val = 2이면 [1, 1, 3, 3, 4, 4, 4...]로 바꾸고 7을 반환한다. 📌 Code GitHub Repository

2023년 3월 27일
·
0개의 댓글
·
post-thumbnail

[ LeetCode ] 26 Remove Duplicates from Sorted Array

Link | LeetCode 26번 문제 Remove Duplicates from Sorted Array 📌 About 이 문제는 Custom Judge 문제로 몇 가지를 따라야한다. 요약하자면 주어진 nums의 앞에서부터 미중복 숫자들로 차례대로 교체한다. 그리고 미중복 숫자들의 갯수를 반환하면 된다. 예를 들어 [1, 1, 2, 3, 3, 4, 4, 4]이면 [1, 2, 3, 4...]로 바꾸고 4를 반환한다. 📌 Code GitHub Repository

2023년 3월 26일
·
0개의 댓글
·
post-thumbnail

[ LeetCode ] 20 Valid Parentheses

Link | LeetCode 20번 문제 : Valid Parentheses 📌 About 괄호 문자열 문제는 Stack을 통해서 해결하면 된다. 📌 Solution 괄호 문자열의 괄호들을 차례대로 탐색한다. 만약 탐색한 괄호가 여는 괄호이면 Stack에 삽입한다. 닫는 괄호이면 Stack의 top과 비교하면 된다. 짝이 맞으면 Stack을 pop하고 짝이 맞지 않으면 push 하면 된다. 📌 Code GitHub Repository

2023년 3월 26일
·
0개의 댓글
·