반응형

분류 전체보기 578

React(리액트) 컴포넌트 분할/조각화를 통해 코드 가독성 높이기

이번 시간에는 React(리액트) 코드를 여러 개의 JSX 요소들로 나누어 코드의 가독성을 높이는 방식으로 코드를 최적화해 보도록 하겠습니다. 실행 결과와 전체 코드 먼저 실행 결과입니다. select 태그를 사용하여 모드를 선택할 수 있고, 원하는 단위를 다른 단위로 변환할 수 있습니다. ↓ 전체 코드는 다음과 같습니다. 더보기 더보기 코드 부분별로 살펴보기 그럼 이제 코드를 여러 개의 작은 JSX 요소로 나누는 것이 어떤 장점이 있는지 살펴봅시다. 단위 변환기 단위를 선택해주세요. 시간 ↔ 분 킬로미터 ↔ 마일 {index === "x" ? "단위를 선택해주세요." : null} {index === "0" ? : null} {index === "1" ? : null} 주목할 코드는 이 부분입니다. s..

웹 개발/React 2024.02.17

React(리액트) State를 이용해 단위 변환기 구현하기

이번 시간에는 React(리액트)의 State를 이용해 단위 변환기를 구현해보도록 하겠습니다. 리액트에서 State는 이름 그대로 '컴포넌트의 상태', 또는 '컴포넌트 안에서 관리되는 데이터'를 의미합니다. State를 이용해 어떤 컴포넌트의 상태를 변경하면, React는 자동으로 이 컴포넌트만을 다시 렌더링하여 변경된 상태를 페이지에 반영해줍니다. React의 State를 사용하는 것이 좋은 이유는, 리액트는 앞서 말한대로 필요한 부분만 다시 렌더링하므로, 값이 바뀐다고 페이지 전체를 다시 렌더링할 필요가 없기 때문입니다. 따라서 매우 효율적으로, 화면에 변화가 필요한 부분만을 다시 로딩할 수 있습니다. 물론 Vanilla Javascript에서도 수동적으로 DOM을 조작할 수 있지만, 매우 긴 코드가..

웹 개발/React 2024.02.16

React(리액트) 컴포넌트와 이벤트 간단하게 만들고 렌더링하기

React(리액트)를 이용해 간단한 컴포넌트와 이벤트를 간단하게 구현해봅시다. 컴포넌트와 이벤트 구현 h3 텍스트에 마우스가 진입하면 '마우스가 들어왔습니다.'라는 텍스트가 콘솔에 출력되고, 버튼을 클릭하면 '클릭되었습니다.'라는 문구가 콘솔에 출력됩니다. 코드가 어떻게 작동하는지 한 줄씩 확인해봅시다. 이 코드는 사용자 인터페이스를 만들기 위한 JavaScript 라이브러리 중 하나인 React를 로드하는 코드입니다. 이 코드는 React에서 작성한 객체 모델인 DOM을 실제 페이지에 표시하는 역할을 수행하는, ReactDOM을 로드하는 코드입니다. 이 코드는 최신 버전의 JavaScript 코드를 옛날 버전의 JavaScript 코드로 변환해주는 역할을 수행하는, Babel을 로드하는 코드입니다. 필..

웹 개발/React 2024.02.12

Codeforces 퍼플 달성 / 2022 BOJ solved 1위 / 블로그 접습니다 (+ 수정 : 다시 시작합니다!)

Codeforces 퍼플 달성 코드포스의 Goodbye 2022 대회에서 적당한 레이팅을 띄웠고 덕분에 2022년이 끝나기 전에 퍼플을 달성할 수 있었다. 나처럼 어려운 문제 푸는거 싫어하고 업솔빙이 재미없다면 그냥 컨테스트만 꾸준히 쳐도 경험이 쌓이니 이를 추천한다. 9개월 정도 걸렸는데 재능 있는 사람들이 훨씬 빨리 올라가는거 보면 부럽긴 하다. BOJ 2022 solved 수 1위 백준에서 1년동안 문제를 제일 많이 푼 등수인데 보니까 올해는 내가 1등을 기록했다. 심심할 때마다 풀었는데 어려운 거 고민하기는 싫어서 브론즈 실버 난이도 문제들을 거의 다 풀다시피 풀었더니 이렇게 된 것 같다. 아무튼 푼 문제 수는 실력이랑은 큰 관계 없다는 거 추후 계획 그리고 이 글을 누가 볼지는 모르겠지만 블로그..

12월 알고리즘 공부 : 퍼시스턴트 세그먼트 트리, 머지 소트 트리, 오일러 회로 등

백준 BOJ 11012번 : Egg 문제 난이도 : Platinum II 알고리즘 분류 : 퍼시스턴트 세그먼트 트리 2차원 좌표계에서 점들의 좌표가 주어질 때, 직사각형 영역이 쿼리로 주어지면 해당 영역에 점이 몇 개가 있는지를 구하는 문제이다. (0 ≤ x, y ≤ 10^5, Q ≤ 50,000) 1차원 좌표계였다면 일반적인 세그먼트 트리로 해결이 가능한 것은 물론이고 값의 갱신이 없으므로 누적 합으로도 쉽게 계산이 가능하다. 2차원 좌표계 + 작은 범위였다면 2차원 배열의 누적 합으로 쉽게 계산이 가능하다. 이 문제에서는 세그먼트 트리 또는 2차원 배열을 선언하면 메모리 초과가 발생하게 되는데 이를 어떻게 해결할 수 있을까? 이러한 문제는 퍼시스턴트 세그먼트 트리(Persistent Segment T..

백준 BOJ 2-SAT 알고리즘 심화 문제 풀이

백준 BOJ 1739번 : 도로 정비하기 문제 난이도 : Platinum I 알고리즘 분류 : 2-SAT 어떤 가로 도로에 대해서 왼쪽 일방 통행의 경우 T, 오른쪽이면 F로 임의로 두자. 마찬가지로 세로 도로에 대해서도 위 방향은 T, 아래 방향을 F로 두자. 방향은 푸는 사람이 정의하면 된다. 명제 연결할 때만 제대로 연결하면 관계없다. 이제 어떤 점에서 다른 점으로의 이동에 대해, 두 가지 경로가 있으므로, 두 경로에 대해 (A and B) or (C and D)꼴이 나온다. 이것을 식을 풀어서 (나는 분배 법칙으로 풀었다.) (E or F) and (G or H) 꼴로 바꾼 뒤 2-SAT를 적용해주면 된다. 이 문제는 2-SAT에 다른 알고리즘이 접목된 문제도 아닌데 난이도가 Platinum I이..

빠른 MCMF 최소 비용 최대 유량 알고리즘 등 (+ 응용 문제 풀이)

11월 말 백준에서 풀이한 문제들 중, 플래티넘 이상 난이도 문제들에서 다른 사람들이 잘 다루지 않는 내용들을 선별하여 정리해보려고 한다. 이번 기간에 다룬 알고리즘은 MCMF(최소 비용 최대 유량)이다. 낮은 난이도나 다른 사람들이 많이 푼 문제들은 이미 다 풀어서 플래티넘 난이도 중에서도 어려운 것만 남았고, 그에 대한 풀이를 다룬 사람들이 별로 없어서 간략하게나마 적어본다. 어디까지나 스스로 공부, 잊어버렸을 때 나중에 다시 참고하기 위한 목적이지만 혹시나 검색 유입으로 보는 사람이 있다면 도움이 될 수 있으면 좋겠다. 백준 BOJ 14424번 : 두부장수 장홍준 3 문제 난이도 : Diamond V 알고리즘 분류 : MCMF (최소 비용 최대 유량) 사실 이 문제는 이전에 백준 BOJ 11111번..

11월 알고리즘 공부 : 최소 외접원/구, 가장 가까운 두 점, 번사이드 보조정리 등

최근 글 작성 빈도가 현저히 낮아졌는데, 바쁘다거나 그런 이유보다는 2022년 막바지로 갈수록 의욕이 떨어져간다는 표현이 맞는 것 같다. 그래도 아직 백준에서 2022년 푼 문제 수 랭킹 1위를 유지하고 있기 때문에 최소한 유종의 미라도 거두기 위해 연말까지는 열심히 풀어보려고 한다. 아무튼 11월 중순동안 공부한 내용들을 나중에 스스로 참고할 수 있도록 정리해보려고 한다. 백준 BOJ 2626번 : 헬기착륙장 문제 난이도 : Diamond V 알고리즘 분류 : 최소 외접원 2차원 좌표 평면 상의 N개의 점이 주어질 때 이들을 모두 포함하는 가장 작은 원의 중심과 반지름을 구하는 문제이다. 세 점을 지나는 원이 반드시 존재함을 이용하여 풀이하는 문제이다. (여담으로, 타원의 경우 최대 다섯 개의 점을 지..

백준 BOJ 17030번 : Cow Dating 풀이 (Diamond V, 투 포인터)

백준 BOJ 17030번 : Cow Dating 문제 난이도 : Diamond V 알고리즘 분류 : 투 포인터, 누적 합 N개의 선택받을 확률 p_i가 주어질 때 (실제 입력은 p_i의 10^6배를 한 값들로 주어진다.) 연속한 구간 p_l ~ p_r을 선택하여 그들 중 하나에게만 선택이 될 확률의 최댓값을 구하는 문제이다. 구간을 잡고 관계식을 찾는 것이 핵심이다. 구간 [l, r]에서의 확률이 이미 있을 때, 어떤 조건에서 구간을 늘렸을 때 확률이 늘어나는지 계산해보자. 구간 [l, r]에서 하나에게만 선택받을 확률 f(l, r)은 위의 식처럼 나타낼 수 있고, 거기에 항을 하나 추가하여 f(l, r+1)을 관계식으로 구할 수 있다. 그러면 f(l, r+1) > f(l, r)일 조건을 찾아주면 된다...

백준 BOJ 24486번 : Counting Haybales 풀이 (Diamond II, DP)

백준 BOJ 24486번 : Counting Haybales 문제 난이도 : Diamond II 알고리즘 분류 : DP N개의 자연수가 주어지고, 크기 차이가 1인 인접한 두 수를 서로 swap할 수 있다고 할 때, 만들 수 있는 서로 다른 수열의 개수를 구하는 문제이다. 문제의 풀이는 USACO 사이트를 참고하였다. 먼저 관찰을 통해 알 수 있는 사실은 홀짝성이 같은 수들끼리는 순서가 바뀔 수 없다는 것이다. (이것은 오직 크기 차이가 1인 인접한 두 수만 교환이 가능하므로, 홀짝성이 같은 = 크기가 2 이상 차이나는 수는 서로 위치가 바뀔 수 없기 때문이다.) 원래 정석적인 풀이는 이 사실을 이용하여 그래프의 단방향 간선들을 만들 수 있으므로, 위상 정렬로 푸는 풀이로 보인다. 아무튼 홀짝성을 활용하..

반응형