전체 96

[SQL] LeetCode 182번 문제 학습

문제 설명Duplicate Emails는 Person 테이블에서 중복된 이메일을 찾는 거임. email 컬럼에서 두 번 이상 등장하는 이메일만 리턴.결과는 Email이라는 컬럼 이름으로 출력.테이블 구조:Person: id (PK), email.EX:{id: 1, email: "a@b.com"}, {id: 2, email: "c@d.com"}, {id: 3, email: "a@b.com"} 있으면,"a@b.com"이 두 번 나왔으니까 결과는 "a@b.com".푼 과정중복된 이메일을 찾으려면 같은 email이 몇 번 나왔는지 세야 함.GROUP BY email로 이메일별 그룹 만들고, COUNT로 각 그룹의 행 수 셈.HAVING으로 횟수가 2 이상인 그룹만 남김.마지막으로 email을 EMAIL로 출력...

leetcode , 백준 2025.04.15

[SQL] LeetCode 181번 문제 학습

문제 설명Employees Earning More Than Their Managers는 Employee 테이블에서 매니저보다 월급이 많은 직원을 찾는 거임. Employee 테이블에서 직원의 name을 리턴.조건: 직원의 salary가 자기 매니저의 salary보다 커야 함.테이블 구조:Employee: id (PK), name, salary, managerId (FK, 매니저의 id 참조. NULL일 수 있음).예를 들어:{id: 1, name: "Joe", salary: 70000, managerId: 3} 있고,{id: 3, name: "Sam", salary: 60000, managerId: NULL} 있으면,Joe의 월급(70000)이 매니저 Sam의 월급(60000)보다 크니까 Joe가 결과에..

leetcode , 백준 2025.04.15

[SQL] LeetCode 175번 문제 학습

문제 설명Combine Two Tables는 두 테이블, Person과 Address를 조인해서 특정 컬럼을 가져오는 문제임Person 테이블에서 firstName, lastName을 가져오고.Address 테이블에서 city, state를 가져옴.모든 Person의 정보를 포함해야 함, 근데 Address 정보는 없어도 괜찮음 (즉, Address에 매핑 안 되는 사람도 결과에 나와야 함).테이블 구조:Person: personId (PK), firstName, lastName.Address: addressId (PK), personId (FK), city, state.EX)Person에 {personId: 1, firstName: "John", lastName: "Doe"} 있고,Address에 {p..

leetcode , 백준 2025.04.15

[정렬] LeetCode 169번 문제 학습

문제 설명Majority Element는 정수 배열 nums에서 과반수(majority)를 차지하는 요소를 찾는 문제임.과반수 요소는 배열 길이 n 기준으로 n/2번 초과해서 등장하는 숫자임nums = [3,2,3] → 3이 답 (3이 두 번 나와서 n/2 = 1.5 초과).nums = [2,2,1,1,1,2,2] → 2가 답 (2가 네 번 나와서 n/2 = 3.5 초과).배열 길이 n은 1 이상.항상 과반수 요소가 존재함. 이게 중요! 따로 체크 안 해도 답이 무조건 있음.시간복잡도 O(n log n) 이하로 풀면 좋고, 가능하면 O(n)으로 푸는 게 이상적.공간복잡도는 O(1)로 최소화하는 방법도 있음.문제를 푼 과정정렬 함수 (sortExample)sort.Slice 써서 배열 nums를 오름차순으..

leetcode , 백준 2025.04.15

[재귀,반복문] LeetCode 144번 문제 학습

문제 설명Binary Tree Preorder Traversal는 이진 트리(Binary Tree)를 전위 순회(Preorder Traversal) 방식으로 탐색해서 노드 값들을 배열로 리턴하는 문제임. 전위 순회는:루트(Root) → 왼쪽 서브트리(Left) → 오른쪽 서브트리(Right) 순서로 방문하는 거.문제를 푼 과정메인 함수 (preorderTraversal)빈 슬라이스 list := []int{} 만들어서 결과 저장할 준비함.preOrder라는 헬퍼 함수 호출하면서 root랑 슬라이스 포인터(&list) 넘김.마지막에 list 리턴. 이게 최종 답임.재귀 헬퍼 함수 (preOrder)root가 nil이 아닌지 체크. nil이면 아무것도 안 하고 리턴.nil 아니면:현재 노드 값(root.Va..

카테고리 없음 2025.04.15

[재귀,반복문] LeetCode 145번 문제 학습

문제 설명Binary Tree Postorder Traversal는 이진 트리를 후위 순회(Postorder Traversal) 방식으로 탐색해서노드 값들을 배열로 리턴하는 거임. 왼쪽 서브트리(Left) → 오른쪽 서브트리(Right) → 루트(Root) 순서로 방문.문제를 푼 과정Preorder 코드에서 순서만 바꿔서 깔끔하게 풀었음. 메인 함수 (postorderTraversal)빈 슬라이스 list := []int{} 만들어서 결과 저장할 준비.postorder 헬퍼 함수 호출하면서 root랑 슬라이스 포인터(&list) 넘김.마지막에 list 리턴. 이 부분은 Preorder랑 똑같음.재귀 헬퍼 함수 (postorder)root가 nil인지 체크. nil이면 아무것도 안 하고 리턴.nil 아니면..

leetcode , 백준 2025.04.15

[재귀,반복문] LeetCode 141번 문제 학습

문제 설명Binary Tree Preorder Traversal는 이진 트리(Binary Tree)를 전위 순회(Preorder Traversal) 방식으로 탐색해서 노드 값들을 배열로 리턴하는 문제임.루트(Root) → 왼쪽 서브트리(Left) → 오른쪽 서브트리(Right) 순서로 방문하는 거.제약 조건트리는 비어 있을 수도 있음 (root == nil).노드 값은 정수(int)로 주어짐.출력은 []int 슬라이스로, 순회 순서대로 값 담아서 리턴.문제를 푼 과정재귀메인 함수 (preorderTraversal)빈 슬라이스 list := []int{} 만들어서 결과 저장할 준비함.preOrder라는 헬퍼 함수 호출하면서 root랑 슬라이스 포인터(&list) 넘김.마지막에 list 리턴. 이게 최종 답..

leetcode , 백준 2025.04.14

[반복문] LeetCode 136번 문제 학습

문제 설명Single Number 문제는 정수 배열 nums가 주어졌을 때, 딱 한 번만 나타나는 숫자를 찾아내는 거임. 배열에 있는 숫자는 보통 두 번씩 나타나는데, 오직 하나만 한 번 등장함. 예를 들어:nums = [2,2,1] → 1이 답 (2는 두 번, 1은 한 번).nums = [4,1,2,1,2] → 4가 답 (1과 2는 두 번, 4는 한 번).nums = [1] → 1이 답 (한 개뿐이니까).제약 조건:배열 길이는 1 이상.추가 메모리(공간복잡도)를 최소화하는 게 좋음. 즉, O(1) 공간으로 풀라는 힌트 같은 거임.시간복잡도는 O(n) 정도로 풀어야 효율적임.문제를 푼 과정특이 케이스 처리배열 길이가 1이면 바로 nums[0] 리턴함. 이건 한 번만 등장하는 숫자가 그거 하나뿐이란 뜻이니..

leetcode , 백준 2025.04.14

[반복문] LeetCode 125번 문제 학습

문제 설명Valid Palindrome 문제는 주어진 문자열이 회문(Palindrome)인지 아닌지 판단하는 거임. 회문이 뭐냐면, 문자열을 뒤집어도 똑같은 거. 예를 들어, "racecar"는 회문이지만 "hello"는 아님.근데 이 문제엔 조건이 좀 붙음:대소문자 구분 안 함. 즉, 'A'랑 'a'는 같은 거로 취급.특수문자, 공백, 기호는 무시. 알파벳이랑 숫자만 신경 쓰면 됨.예를 들어, "A man, a plan, a canal: Panama"는 다 정리하고 나면 "amanaplanacanalpanama"가 돼서 회문이 맞음.또 다른 예로, "race a car"는 "raceacar"가 돼서 회문이 아님.결론적으로, 문자열을 정리한 다음에 회문인지 체크해야 함.문제를 푼 과정소문자를 대문자로 변..

leetcode , 백준 2025.04.11

[반복문] LeetCode 121번 문제 학습

문제를 푼 과정 처음엔 완전 탐색으로 구현해봤음→ 모든 날짜 쌍을 비교해서 최대 이익을 구하는 방식→ 작은 입력엔 잘 돌아가지만 큰 입력에서 느려짐그래서 최적화된 알고리즘으로 개선함→ 지금까지 본 가장 싼 가격(minPrice) 을 저장해두고→ 현재 가격 - minPrice 로 이익을 계산해서 최대값을 업데이트함→ 이러면 한 번의 순회로 해결 가능해서 시간복잡도 O(n)임 문제에 대한 설명주어진 배열 prices는 각 날짜의 주식 가격을 의미함.이 중 하루를 골라 주식을 사고, 그 이후 중 하루를 골라 팔아서얻을 수 있는 최대 이익을 구하는 문제임.조건은 단순함:한 번만 사고, 한 번만 팔 수 있음무조건 나중에 사는 게 아님. 산 날보다 뒤에 팔아야 함문제를 풀려면 어떤 알고리즘을 써야 하는지처음 떠오를..

leetcode , 백준 2025.04.11