분류 전체보기 214

1761. Minimum Degree of a Connected Trio in a Graph - Streak 7

연결된 "트리오"의 최소 차수를 구하는 문제이다. 트리오인걸 알려면, 두 정점은 거쳐봐야 안다. 이어진 두 정점 사이에 같이 알고 있는 정점은 트리오를 형성하므로, 그래프 탐색을 이용하면 찾을 수 있을 것 같다.그 전에, 이전에 방문한 노드를 아는 방법이 필요하다. dfs 로 순회한다고 할 때, 다음과 같이 지나친 정점을 표현해보자.pprevprevnownextpprev == next로 검사하면 된다. pprev가 유일하지 않을 수 있는 문제가 있나?위 그림의 경우, prev, now, next의 사이클이 잡히지 않을 수 있다.확실한건 이전에 방문한 모든 pprev를 아는 것 그렇게 따지면, prev도 유일하지 않다. 그럴거면, 모든 정점에서 각각 2번 이동 후, 서로가 있는지 확인하는게 효율적이다.시간..

PS/LeetCode 2025.09.20

2025년 9월 3주차 회고

지금 할 수 있으면 해라.지금 할 수 없으면 하지마라.지금 해야하면 해라.이번주에 한 것항암치료 보조릿코드 Hard 1일 1문제 - 스트릭 기록하기리액트 기본 구조 & API 학습결국 API류는 직접 쓰고 트레이드오프를 고민해봐야 능숙해진다.리액트 튜토리얼카페 알바 이번주에 하지 못한 것코틀린 코루틴 학습쿠팡커피 원두 종류 및 맛 분석(블렌딩 or 싱글오리진)USACO Gold - DP 번역 및 문제풀이큰 의미가 없는 듯.핀잇 기능 요구사항 도출 & 백엔드 설계파드셉 분석다음주에 할 수 있는 것핀잇 프로젝트 분석기본 UI 컴포넌트 구성기능 요구사항(유스케이스) 도출요구사항에 따른 UI 컴포넌트 완성요구사항에 따른 백엔드 도메인 모델 설계요구사항에 따른 계약 완성(가능하면) UI 컴포넌트/도메인 모델 코드..

useReducer

useReducer 훅은 컴포넌트 내부에 새로운 State를 생성하는 조금 특별한 리액트 훅이다.상태 변화 함수 대신 “상태 변화 요청 함수” 를 사용한다.useState와 달리 “상태 관리 코드”(이벤트 핸들러로 쓰거나 했던 setState 함수를 사용하는 함수들)를 컴포넌트 외부로 분리할 수 있다.모든 useState는 useReducer 로 대체 가능하다.컴포넌트는 렌더링하기 위한 함수인데, 컴포넌트가 내부적으로 "도메인 로직"을 갖게 되면 책임 분리가 잘 안되게 된다.즉, State를 관리하는 코드가 컴포넌트 안에 길어지는 상황을 막기 위해 사용한다.즉, useReducer는 다음과 같은 경우에 사용한다.컴포넌트 내부에 보관해야 하는 상태가 도메인 로직과 밀접한 상태일 때컴포넌트 내부에 보관해야 ..

리액트 컴포넌트의 라이프사이클과 useEffect

상태 전이는 그 상태 전이의 발생을 알리는 방식의 설계로 무궁무진한 응용 가능성을 갖고 있다.그렇기 위에 꼭 알아둬야 하는 리액트 컴포넌트의 생명주기와, 이를 활용할 useEffect에 대해 알아보자.리액트의 컴포넌트의 생명주기Mount컴포넌트가 탄생하는 순간.화면에 처음으로 렌더링되는 순간.Update컴포넌트가 리렌더링 되는 순간.UnMount컴포넌트가 화면에서 사라지는 순간.컴포넌트가 렌더링에서 제외되는 순간.useEffect리액트에선 각 생명주기 별로 명령을 지정해둘 수 있다.이를 라이프사이클 제어 라고 하며, useEffect() 훅을 통해 구현할 수 있다.리액트 컴포넌트의 사이드 이펙트를 제어하는 리액트 훅.사이드 이팩트컴포넌트의 동작에 따라 파생되는 여러 효과 (생명주기 제어 등)useEffe..

State, 리렌더링, 리액트 훅과 커스텀 훅 - 리액트의 핵심 기능

리액트에서의 State모든 컴포넌트들은 State를 가질 수 있다.현재 State에 따라 렌더링 결과를 다르게 할 수 있다.State의 변화에 따라 렌더링을 다시 하는것을 Re-Rendering이라고 한다.리액트는 변수의 값의 변화로는 리렌더링 되지 않고(버퍼에 담김), State가 변화해야만 즉각적으로 리렌더링을 수행한다.“react” 에서 useState를 import 하는것으로 State를 갖게 할 수 있다.이때, “react”에는 useState만 있는것이 아니므로 다음과 같이 코드를 작성해야 한다import { useState } from "react";state의 구성요소state는 배열, useState() 함수를 통해 얻을 수 있다.state가 처음 생성됐을 땐 [ undefined, f ..

컴포넌트, jsx, 이벤트와 이벤트 객체 - 리액트의 기초 기능 사용 방법

개인 학습용 정리로, 리액트 첫 학습을 목적으로 찾아보고 계신다면 공식 문서를 강력히 권장드립니다. 자습서: React 시작하기 – ReactA JavaScript library for building user interfacesko.legacy.reactjs.org 컴포넌트란?js에서 html 코드를 반환하는 함수.컴포넌트들은 트리 구조로 관리되며, root 컴포넌트를 루트 노드로 삼는다.특정 컴포넌트의 리턴값 안에 들어있는 컴포넌트를 특정 컴포넌트의 “자식 컴포넌트” 라고 한다.리액트는 클래스 기반 컴포넌트와 함수 기반 컴포넌트가 있지만, 리액트에서는 주로 함수 기반 컴포넌트를 사용한다.함수 기반 컴포넌트는 반드시 첫글자가 “대문자”여야 한다.jsx에서 소문자로 시작하는 이름은 html 요소로 보고j..

리액트 소개

리액트의 특징 (추구하는 것)컴포넌트를 기반으로 UI를 표현한다.이는 재사용성이 높은 UI의 구현을 위해 적용되었다.화면 업데이트 구현이 쉽다.선언형 프로그래밍 방식(추상화된 기능) 으로 동작하기 때문에, 구현이 간편하다.선언형 프로그래밍 ↔ 명령형 프로그래밍(하나부터 열까지 전부 지시)으로 이해하면 좋다.화면 업데이트가 빠르게 처리된다. (SPA)리액트의 SPA는 Virtual DOM(버퍼 객체) 을 구성함으로써, JS로 인한 DOM의 수정 사항을 모아서 객체로 처리하다가, 마지막에 DOM을 한번만 수정하고, 그러므로 수정 시간을 단축시킨다.브라우저의 렌더링 과정HTML 을 DOM(Document Object Model)으로 변환하고, CSS를 CSSOM(CSS Object Model)로 변환한다.DO..

1301. Number of Paths with Max Score - Streak 6

DP 로 최댓값을 유지하면 풀 수 있다. 근거: 해당 지점의 최댓값이 바뀌면, 이후는 반드시 그 최댓값 경로를 따라야 한다.따라서, 비교적 간단하게 최적 부분 구조+중복 부분문제를 만족한다. 그럼 남은 문제는, "벽 의 처리를 어떻게 할 것인가?"이다.그냥 초깃값을 매우 낮은 음수로 설정해두면 된다.1만 * 9 = 최대 값 9만이니, 기본 값 초기화를 전부 -10억으로 해두면 벽을 뛰어넘는 값으로 잘못된 값을 리턴하기 어려워진다.class Solution { public int[] pathsWithMaxScore(List board) { int n = board.size(); List> dp = new ArrayList(); for(int i = 0; i tem..

PS/LeetCode 2025.09.19

1250. Check If It Is a Good Array - Streak 5

이 문제는 결국 양수와 음수의 조합으로 나타내진다.이를 모듈러 연산으로 나타낼 수 없을까? 여기서 확장 유클리드 호제법이 적용 가능해진다.gcd = 1인 조합이 하나라도 있으면 True이다.근데 우리 문제는, 다음과 같은 형태이다.이걸 확장 유클리드 호제법의 형태로 바꿀 수 없을까?둘을 더하면, 최대공약수는 약수로 남기고, 나머지는 더한 효과가 된다.즉, 둘을 더해도 최대공약수는 무조건 남는다 최대공약수는 이 문제에서 지워야 하는 대상이므로,전체의 최대공약수가 1이면 True이고, 전체의 최대공약수가 1이 아니면 False이다.class Solution { public boolean isGoodArray(int[] nums) { int now = nums[0]; for(in..

PS/LeetCode 2025.09.18

1000. Minimum Cost to Merge Stones - Streak 4

비슷한 문제를 풀어본 적이 있다.https://www.acmicpc.net/problem/11066 이 문제와 다른 것은 뭘까?파일 합치기는 반드시 바로 옆칸 1개와 합치기 때문에, 순차대로 순회하기가 쉽다.이 문제는 연속된 k칸끼리 합쳐야 하기 때문에, 추가적인 처리가 필요하다.n%(k-1)==1 이 아니면 -1을 반환해야 한다.연속된 k칸끼리의 합치는 방법을 생각해야 한다.파일 합치기의 경우DP[i][j] = DP[i][k] + DP[k+1][j] + psum[j] - psum[i-1]이 문제는?연속된 k칸을 합쳐야 한다. 점화식 자체가 달라지는건가?dp[i][p] + dp[p][q] + ...k가 커지면 for문의 깊이도 그만큼 커진다.k가 2인 경우를 제외하고,내부가 len % (k-1) == 1..

PS/LeetCode 2025.09.17