https://www.acmicpc.net/problem/2638 6개월 전에 처음 풀었던 문제다. 그 때는 1트만에 해결했는데, 이번에 다시 풀어보니 15트를 했다. 문제를 너무 어렵게 생각했던 것이 문제였다. 이 문제의 핵심은 공기가 내부인지 외부인지를 판단하는 로직이다. 처음 접근했을 때, 이 컨디션을 정의하기 위해 'BFS로 탐색한 공기의 갯수 < 둘러싼 치즈의 갯수'인 경우 모두 내부 공기로 설정을 했다. 이렇게 했을 때, 체크하지 못한 경우의 수가 너무 많았다. 가장 대표적인 것은 0,0부터 시작해서 삥 둘렀는데 치즈와 맞닿은 공기보다 치즈가 더 많은 경우가 존재한다는 것이다. 위 경우가 대표적이다. 0,0부터 시작해서 삥 둘렀는데 모든 공기는 외부 공기다. 그런데 0과 접촉하는 1의 갯..
https://www.acmicpc.net/problem/1484 1484번: 다이어트 성원이는 다이어트를 시도중이다. 성원이는 정말 정말 무겁기 때문에, 저울이 부셔졌다. 성원이의 힘겨운 다이어트 시도를 보고만 있던 엔토피아는 성원이에게 새로운 저울을 선물해 주었다. www.acmicpc.net (현재 몸무게 : A)^2 - (기존 몸무게 : B)^2 = G인 'A'의 경우의 수를 찾는 것이다. G는 100,000 이하의 자연수다. 잘 생각해보면 G는 값이 정해져있는데, A / B의 값은 범위가 정해져 있지 않은 것을 알 수 있다. 2에 의거해서 어디까지 살펴봐야할지 경계조건도 설정해야하는 것을 알 수 있다. 경계조건 설정을 위해 A^2 - B^2 = (A-B)(A+B)로 인수분해를 한다. 이 때, 알..
https://www.acmicpc.net/problem/12892 12892번: 생일 선물 첫 줄에 친구의 수 N(1 ≤ N ≤ 100,000)과 미안함을 느끼게 되는 최소가격차 D(1 ≤ D ≤ 1,000,000,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 선물의 가격 P와 만족도 V(0 ≤ P ≤ 1,000,000,000, 0 www.acmicpc.net N = 100,000이고 완전탐색을 할 경우 10억의 시간이 필요하다. 따라서 TLE 발생한다. N^2에서 시간을 줄여야 할 필요가 있다. 가능한 경우의 수는 그리디, DP, 이분탐색, 두 포인터다. 정렬하게 되면, 가장 큰 값을 가지는 영역을 구하면 되는 문제로 치환이 가능하다. 항상 모든 값은 양수이기 때문에 영역의 길이가 가장 ..
회원 관리 시스템의 API 설계 → POST 기반으로 설계한다면? 회원 목록 /members → GET 회원 등록 /members → POST 회원 조회 /members/{id} → GET 회원 수정 /members/{id} → PATCH, PUT, POST 회원 삭제 /members/{id} → DELETE 앞서 이야기 한 것처럼 URI는 '리소스'만 식별하도록 한다. 행위를 식별하는 것은 최대한 메서드로 구현한다. 회원 목록 : 조회했을 때 필터나 정렬은 쿼리 파라미터로 해주면 됨 → GET 사용 회원 등록 : /members에 POST로 넣으면 회원이 등록되는 것으로 설계한다. → POST 사용 회원 조회 : URI를 계층 구조로 만들고, 조회 시 /members + 식별자를 쓴다 → GET 회원 ..
클라이언트에서 서버로 데이터 전송 데이터 전달 방식은 크게 2가지다. 쿼리 파라미터를 통한 데이터 전송 (URI 끝에 쿼리 파라미터를 넣어서 데이터를 전송) - GET에서 많이 사용함 - 주로 정렬 필터(검색어)에서 많이 사용함. (?q=hello) HTTP 메시지 Body를 통한 데이터 전송 - POST, PUT, PATCH - 회원 가입, 상품 주문, 리소스 등록, 리소스 변경 클라이언트에서 서버로 데이터 전송 아래 4가지 상황에 대해서 하나씩 살펴보자 정적 데이터 조회 → 이미지, 정적 텍스트 문서 동적 데이터 조회 → 주로 검색, 게시판 목록에서 정렬 필터(검색어) HTML Form을 통한 데이터 전송 → 회원 가입, 상품 주문, 데이터 변경 HTTP API를 통한 데이터 전송 - 회원 가입, 상..