leetcode , 백준 57

[링크드리스트] LeetCode 234번 문제 학습

문제 설명Palindrome Linked List는 단일 연결 리스트가 회문인지 확인하는 문제임. 회문이면 true, 아니면 false 리턴. 예를 들어, 1->2->2->1은 회문이라 true, 1->2->3은 false. 시간복잡도 O(n), 공간복잡도 O(1)로 푸는 게 이상적. 푼 과정세 단계로 풀었음. 첫째, 빠른/느린 포인터(center, end)로 리스트 중간 찾음. end가 두 칸, center가 한 칸씩 가서 중간 노드(center) 구함. 둘째, center부터 끝까지 reverseList로 뒤집음. 셋째, 원래 리스트 헤드(left)와 뒤집힌 리스트(prev)부터 동시에 순회하면서 값 비교. 다르면 false, 끝까지 같으면 true. 빈 리스트나 노드 하나는 바로 true 처리. 로..

leetcode , 백준 2025.05.08

[스택] LeetCode 232번 문제 학습

문제 설명Implement Queue using Stacks는 스택을 써서 큐를 구현하는 문제임. 큐의 연산 push, pop, peek, empty를 지원해야 함. push는 요소를 큐 뒤에 추가, pop은 앞에서 제거하고 리턴, peek은 앞 요소 리턴, empty는 큐가 비었는지 확인. 스택은 후입선출(LIFO)이라 선입선출(FIFO) 큐를 구현하려면 스택 조작이 필요함. 푼 과정스택 하나로 풀었음. 슬라이스([]int)를 스택처럼 써서 구현. push는 슬라이스 끝에 append로 추가. pop은 첫 요소 꺼내고 슬라이스 잘라서 리턴. peek은 첫 요소 리턴. empty는 슬라이스 길이 체크. 근데 이건 스택이 아니라 그냥 슬라이스 직접 써서 큐 구현한 거라 문제 의도랑 살짝 안 맞음. 문제는 ..

leetcode , 백준 2025.05.08

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

문제 설명Summary Ranges는 정수 배열 nums에서 연속된 숫자 구간을 문자열 배열로 표현하는 문제임. 각 구간은 시작과 끝 숫자를 "시작->끝" 형식으로 나타내고, 숫자 하나면 그냥 문자열로 추가. 예를 들어, nums = [0,1,2,4,5,7]이면 ["0->2","4->5","7"] 리턴. nums = [0,2,3,4,6,8,9]면 ["0","2->4","6","8->9"]. 배열은 오름차순이고 중복 없음. 푼 과정배열 순회하면서 연속 구간 찾음. start로 구간 시작 인덱스 관리하고, i로 현재 인덱스 이동. i가 마지막이거나 nums[i]+1이 다음 숫자와 다르면 구간 끝남.start == i면 숫자 하나라 nums[start]를 문자열로 추가. 다르면 nums[start]->nums..

leetcode , 백준 2025.04.25

[트리,재귀] LeetCode 226번 문제 학습

문제 설명Invert Binary Tree는 이진 트리의 좌우 서브트리를 뒤집는 문제임. 각 노드의 왼쪽과 오른쪽 자식을 스왑해서 전체 트리를 반전시켜야 함.예를 들어, 트리가 4(2(1,3),6(5,7))면 반전 후 4(6(7,5),2(3,1))이 됨. 입력은 TreeNode 구조체로 주어지고, 루트 노드를 받아 반전된 트리의 루트를 리턴하면 됨. 푼 과정재귀로 풀었음. 루트가 nil이면 그대로 리턴. nil 아니면 현재 노드의 왼쪽과 오른쪽 자식을 temp 변수 써서 스왑함. 그 다음 왼쪽과오른쪽 서브트리를 재귀로 호출해서 각각 반전. 마지막에 루트 리턴. 코드 간단하고 트리 반전 로직 딱 맞췄음package mainimport ()type TreeNode struct { Val int Left ..

leetcode , 백준 2025.04.25

[스택,큐] LeetCode 225번 문제 학습

문제 설명Implement Stack using Queues는 큐를 써서 스택을 구현하는 문제임. 스택의 연산 push, pop, top, empty를 지원해야 함. push는 요소 추가, pop은 맨 위 요소 제거 후 리턴, top은 맨 위 요소 리턴, empty는 스택이 비었는지 확인. 큐는 선입선출(FIFO)이라 후입선출(LIFO) 스택을 구현하려면 순서를 조작해야 함. 푼 과정큐 하나로 풀었음. 슬라이스([]int)로 큐를 표현하고, push할 때 새 요소를 슬라이스 끝에 추가한 뒤 기존 요소들을 꺼내서 다시 뒤에 붙임. 이렇게 새 요소가 슬라이스 맨 앞에 오니까 pop과 top이 스택처럼 동작함. Pop은 첫 요소 제거 후 리턴, top은 첫 요소 리턴, empty는 슬라이스 길이 체크. 코드 ..

leetcode , 백준 2025.04.24

[배열,해시테이블,정렬] LeetCode 217번 문제 학습

문제 설명Contains Duplicate는 정수 배열 nums에서 중복 숫자가 있는지 확인하는 문제임. 중복 있으면 true, 없으면 false를 리턴하면 됨. 예를 들어, [1,2,3,1]은 1이 두 번 나와서 true, [1,2,3,4]는 중복 없어서 false임. 배열 길이는 0 이상이고, 시간복잡도 O(n log n) 이하나 O(n)으로 푸는 게 좋음.푼 과정두 가지 방법으로 풀었음. 첫 번째는 정렬 방식. sort.Ints로 배열을 오름차순 정렬하고, 루프 돌면서 nums[i]랑 nums[i-1] 비교해서 같으면 true. 중복 없으면 false. 두 번째는 해시셋 방식. map[int]bool 만들어서 숫자 하나씩 보면서 이미 맵에 있으면 true, 없으면 맵에 넣음. 끝까지 중복 없으면 f..

leetcode , 백준 2025.04.23

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

문제 설명Reverse Linked List는 단일 연결 리스트(Singly Linked List)를 뒤집는 문제임. 리스트의 노드 순서를 완전히 반대로 만들어서 새 헤드를 리턴해야 함.입력: 1 -> 2 -> 3 -> 4 -> 5 → 출력: 5 -> 4 -> 3 -> 2 -> 1.입력: 1 (노드 하나) → 출력: 1.입력: nil (빈 리스트) → 출력: nil.제약 조건:리스트 노드 수는 0 이상.노드 값은 정수(int).연결 리스트는 ListNode 구조체: Val (값), Next (다음 노드 포인터).시간복잡도 O(n), 공간복잡도 O(1)로 푸는 게 이상적.문제를 푼 과정기저 사례 (Base Case):head == nil이면 빈 리스트라 바로 head 리턴. 아무 작업 안 해도 됨.이 조건..

leetcode , 백준 2025.04.22

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

문제 설명Remove Linked List Elements는 단일 연결 리스트(Singly Linked List)에서 특정 값(val)과 같은 노드를 모두 제거하고, 수정된 리스트를 리턴하는 문제임. 리스트가 1 -> 2 -> 6 -> 3 -> 6, val = 6이면, 결과는 1 -> 2 -> 3.리스트가 6 -> 6, val = 6이면, 결과는 빈 리스트(nil).리스트가 비어 있으면(head = nil), 그냥 nil 리턴.제약 조건리스트 노드 수는 0 이상.노드 값과 val은 정수(int).연결 리스트는 ListNode 구조체로 주어짐: Val (값), Next (다음 노드 포인터).시간복잡도 O(n), 공간복잡도 O(1)로 푸는 게 이상적.문제를 푼 과정재귀랑 반복 둘 다 섞어서 풀었음.기저 사례..

leetcode , 백준 2025.04.22

[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