2025/04 18

[반복문] 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 219번 문제 학습

문제 설명Contains Duplicate II는 정수 배열 nums와 정수 k가 주어졌을 때, 중복된 숫자가 있고 그 숫자들의 인덱스 차이가 k 이하인지 확인하는 문제임. nums[i] == nums[j]이고 |i - j| 푼 과정해시맵으로 풀었음. map[int]int 만들어서 숫자와 그 인덱스를 저장함. 배열 순회하면서 숫자 v가 맵에 이미 있으면, 현재 인덱스 i와 이전 인덱스 val의 차이 i - val이 k 이하면 true 리턴. 아니면 맵에 v의 인덱스를 i로 갱신. 끝까지 중복 없거나 조건 안 맞으면 false. 코드 간단하고 문제 요구사항 딱 맞췄음.알고리즘 분석해시맵 썼음. 맵에 숫자 저장/체크는 O(1), 배열 한 번 순회하니까 총 시간 O(n). 공간은 맵 때문에 O(n). 정렬 방..

카테고리 없음 2025.04.23

[배열,해시테이블,정렬] 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 202번 문제 학습

문제 설명Happy Number는 주어진 숫자가 "행복한 숫자"인지 판별하는 문제임. 행복한 숫자는 각 자릿수의 제곱을 더하는 과정을 반복해서 결국 1이 되는 숫자n = 19:1² + 9² = 1 + 81 = 828² + 2² = 64 + 4 = 686² + 8² = 36 + 64 = 1001² + 0² + 0² = 11이 됐으니까 19는 행복한 숫자반면, 1이 안 되면 무한 루프에 빠짐 (예: n = 2는 계속 다른 숫자 나옴).제약 조건:입력 n은 양의 정수.행복한 숫자면 true, 아니면 false 리턴.무한 루프를 피하려면 사이클을 감지해야 함.문제를 푼 과정재귀 방식으로 풀었음기저 사례 (Base Case)입력 n이 한 자릿수(n )일 때 처리.한 자릿수 중 행복한 숫자는 1과 7뿐임 (직접 계..

카테고리 없음 2025.04.21

[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