오답 노트 & 새로 알게 된 점 해당 문제는 매개 변수 탐색 방법을 사용하여 풀었다. possible 메서드 안에서 어떻게 반환할지 매우 헷갈렸다. cnt = M인지 말이다. 이렇게 생각하면 될 것 같다. target 즉, 블루레이의 크기가 커질수록 cnt가 작아진다. 우리가 구하고 싶은 것은 크기의 최솟값이다. true인 것들 중에 가장 왼쪽 값이다. 그래서 cnt가 작을 때 true을 반환한다는 것은 블루레이의 크기가 일정 이상이면 모두 true이고, 거기서 가장 작은 값을 구하는 것이다. 실수했던 부분은 정렬을 하면 안된다. 왜냐하면 문제에서 강의를 순서대로 넣는다고 했기 때문이다. 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24..
오답 노트 & 새로 알게 된 점 위 문제는 이분 탐색으로 lowerbound를 구하는 문제이다. B의 숫자 중에 A의 숫자보다 작은 것들을 구하면 된다. 시간 복잡도는 B를 정렬해야하므로 MlogM B에서 이분 탐색을 실시할 때 logM, 이와 같은 연산을 A의 개수만큼 즉 N만큼 해야하므로 NlogM 둘을 더하면 (N+M)logM 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 import java.io.Buffere..
오답 노트 & 새로 알게 된 점 이 문제는 가중치가 >= 0 이므로 BFS가 아닌 다익스트라를 이용하였다. 이차원 배열을 이용하여 시작점에서 도착점까지 최소 비용을 구하는 문제이다. dist 이차원 배열을 만들어 INF로 초기화하고, 옮기는 곳의 dist와 현재 dist에서 옮기는 곳의 arr값을 비교하여 값을 구한다. 보통 BFS와는 다르게 visit를 사용하지 않는다. 왜? visit를 사용하면 다음 방문 시에 최솟값이 나올 수 있는데, 그 부분을 놓치게 된다. 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 ..
오답 노트 & 새로 알게 된 점 다익스트라의 기본 문제이다. 1번 정점에서 시작하여 특정한 두 정점을 지나서 N에 도착할 때의 길이를 구하는 것이다. 모든 정점을 갈 때마다 최단 경로로 이동해야한다. 그래서 1번 정점, 특정한 두 정점을 각각 시작점으로 하는 다익스트라를 사용했다. dist를 2차원 배열로 만들어 dist[N][0]에는 1번 정점의 각 노드마다 경로, dist[N][1], dist[N][2]에는 특정한 두 정점의 최단 경로 데이터를 넣었다. 그리고 실수할 수 있는 부분은 하나라도 연결되있지 않으면 즉, 필요하는 dist의 값이 INF값이면 -1을 출력해야한다. 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ..
캐시 클라이언트가 서버에 이미지 파일을 요청한다고 생각해보자. 캐시가 없을 경우에는 요청1을 통해 이미지 파일( HTTP헤더, HTTP 바디)을 서버로부터 전송받는다. 요청2를 통해 이미지 파일을 서버로부터 요청1과 같이 전송받는다. 그래서 요청할 때마다 데이터를 다운로드를 받아야하므로 브라우저 로딩 속도가 느려지게 된다. 캐시가 있을 경우에는 요청1을 통해 이미지 파일( HTTP헤더, HTTP 바디)을 서버로부터 전송받는다. 서버가 데이터를 전송할 때, 데이터를 브라우저 캐시에 저장한다. 요청2을 통해 이미지 파일을 전송받으려고 할 때, 캐시에 해당 파일이 존재하므로 캐시에서 데이터를 조회한다. 그래서 캐시 덕분에 캐시 가능 시간동안 네트워크를 사용하지 않아도 되므로 브라우저 로딩 속도가 캐시가 없을 ..
오답 노트 & 새로 알게 된 점 해당 문제도 전에 풀었던 최단경로와 유사한(?) 거의 비슷한 문제이다. 다익스트라 알고리즘을 제대로 알고 있다면 쉽게 풀 수 있다. 2021.12.27 재풀이 다익스트라를 짜면서 TLE, MLE를 다 보았다. 1번을 if절이라 하고, 2번을 =을 안붙일 때라고 말하겠다. 처음 코드에는 1번과 2번 모두 없었다. 그래서 제출을 하면 TLE가 났다. 1번 코드를 작성한 뒤 제출하면 이제 MLE가 난다. 그래서 2번 코드를 작성하고 나니까 AC를 받았다. 다익스트라를 하면서 최적화?라고 해야하나 이게 필요한 것 같다. 앞으로 다익스트라를 풀면서 1번과 2번의 조건은 절대 까먹지 말아야겠다. 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1..
오답 노트 & 새로 알게 된 점 이번에는 최단 경로를 구하는 알고리즘 중 다익스트라를 공부했다. 최단경로 문제는 다익스트라를 이용하는 웰노운 문제로 다익스트라를 제대로 알고있다면 쉽게 풀 수 있는 문제이다. 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 package Grap..
표현 표현은 요청이나 응답에서 전달할 실제 데이터를 말한다. 표현은 표현 헤더와 표현 데이터를 합친 말로 표현 헤더는 표현 데이터를 해석할 수 있는 정보를 제공한다. 표현 헤더에는 type, encoding, language, length의 정보가 들어갈 수 있다. type은 이게 json인지 이미지인지 구별할 수 있는 정보를 제공한다. encoding은 표현 데이털르 어떤 식으로 압축했는지에 대한 정보를 제공한다. 옵션 중 하나인 identity는 압축을 하지 않는다. language는 데이터의 언어를 표현한다. length는 데이터의 길이, 바이트 단위를 표현한다. 협상 협상 헤더는 클라이언트가 선호하는 표현을 요청하는 것으로, 요청시에만 사용한다. Accept, Accept-Charset, Acce..
상태 코드 클라이언트가 요청을 보내면 응답을 하는데, 거기서 응답 코드에 따라 어떤 상태인지 나타내는 상태 코드라는 것이 있다. 1xx, 2xx, 3xx, 4xx, 5xx가 있는데 각각의 상태 코드는 뜻하는 바가 다르다. 그래서 해당 상태 코드를 보고 어떠한 점이 잘못된지 알고 수정하면 된다. 1xx 처리 중이라는 뜻으로 거의 사용하지 않는다고한다. 2xx 요청을 성공적으로 처리했다라는 뜻을 가진다. get을 이용해 멤버를 조회했을 때 응답 메시지에 200 OK를 볼 수 있다. post를 이용해 멤버를 등록하면 201 Created를 볼 수 있다. 여기서 생성된 리소스의 위치는 응답 메시지의 Location을 보면 알 수 있다. 202 Accepted는 요청이 접수됬는데 처리가 완료되지 않았다는 뜻이다...
앞에서 배운 HTTP 메서드들은 클라이언트에서 서버로 데이터를 전송할 때 각자의 쓰임새에 맞게 사용된다. HTTP 메서드 활용 강의 파트에서는 클라이언트에서 서버로 데이터를 전송할 때, 데이터 전달 방식과 그에 따른 상황에 따라 어떤 메서드가 사용이 되는지 배우게 된다. 데이터 전달 방식 데이터 전달 방식에는 크게 2가지가 있다. 쿼리 파라미터를 통한 데이터 전송 쿼리 파라미터란 우리가 앞에서 배운 ? 다음에 뭐가 나온 것들이라고 생각하면 된다. 주로 정렬 필터(검색어)에 사용된다고 한다. 아마 이건 우리가 검색창에 어떤 것을 검색하면 검색한 부분을 ? 뒤에 넣어서 데이터를 조회하는게 아닐까한다. 그래서 GET을 사용한다고 말하는 것 같다. 메시지 바디를 통한 데이터 전송 회원 가입, 상품 주문 등 다양..
오답 노트 & 새로 알게 된 점 해당 문제는 나이트의 이동이랑 문제가 있었던 것 같은데, 그것도 비슷한 문제이다. 처음에 풀 때는 참 복잡하게 풀었다. 문제에서는 입력된 상대편 말의 위치에 따라 최소 횟수를 출력하라고 했다. 그래서 나는 처음에 arr 배열을 char로 한 뒤에 K와 E를 넣고, bfs를 돌리면서 만약에 큐에서 꺼낼 때 이게 E에 도착하면 enemy라는 배열(출력을 입력순대로 하여 좌표를 저장함)을 처음부터 탐색하여 일치하는 것을 count배열(입력순대로 enemy와 index를 일치시켜 count를 출력하기 위함)에 저장한다. 그리고 arr배열을 '0'으로 바꿔주고 cnt++를 한다. 그리고 cnt가 M의 갯수와 같으면 반복문을 종료한다. 근데 풀고나보니, 그냥 처음부터 모든 배열에 최..
API URI 설계 URI를 설계할 때 가장 중요한 점은 리소스 식별이다. 회원 조회, 등록, 수정, 삭제가 리소스가 아니라 회원 자체가 리소스이다. 그래서 회원 리소스를 URI에 매핑시킨다. 그렇다면 회원 조회 : /members/{id} 회원 등록 : /members/{id} 회원 수정 : /members/{id} 회원 삭제 : /members/{id} 이렇게 나타낸다. 여기서 조회, 등록, 수정, 삭제를 어떻게 구분할까? 회원이라는 리소스를 가지고 어떠한 행위를 한다. 행위는 조회, 등록, 수정, 삭제를 의미한다. 리소스와 행위를 분리하는 것은 중요하다. 아무튼 여기서 이제 행위는 어떻게 구분할까? --> HTTP 메서드 사용 HTTP 메서드 GET 저번에 배웠던 요청 메시지처럼 GET 요청 메시지..