목록전체 글 (10)
먹여 살릴 강아지가 있어요
이 글은 해당 기업과 전혀 연관이 없는 포스팅입니다. 다른 회사의 배포프로세스등을 찾으려 여러 블로그를 둘러보던 도중 팀 기술블로그를 발견했다. 근데 하나하나 q=에 붙어서 뒤로가기하면 한세월 해야됨(물론 사내 기술블로그라 UI/UX를 엄청 신경 쓸 필요는 없을 것임)왜 이렇게 만들었을까?검색하기 버튼이 따로 없다. 검색 input에 검색하면 바로바로 보이는 구조임(디바운싱 없이 거의 즉각 반영되는 것으로 추정, 또는 디바운싱을 짧게 해두었다거나...)이런 구조의 좋은점은? 검색어를 실시간으로 URL에 반영하는 패턴: 장단점과 베스트 프랙티스최근 웹 서비스에서는 "검색 버튼" 없이, 사용자가 입력하는 즉시 결과가 나타나는 인스턴트 서치(instant search) 형태가 많이 쓰인다. 문제는 이때 검색어..
https://www.youtube.com/watch?v=W8mH1Ij3bUk 코드 가독성의 4가지 지표1. 명확한 코드2. 단순한 코드3. 독립성이 높은 코드4. 구조적인 코드4개 중 하나를 완벽히 구현하더라도 완벽한 코드는 아니며 여러가지 지표와 시점이 중요하다. 코드 가독성은 수단이며 코드를 CRUD 할 때 생산성을 높이기 위함이다.피어 코드리뷰 이전에, 셀프 코드리뷰를 진행하기다만, cs 등 일반적인 지식은 있지만 도메인적인 지식, 즉 제품이나 개발한 기능에 한정된 지식은 배제하고 코드를 바라봐야 한다. (어려울거같다...) 프로그래밍 지식은 주니어/시니어간 차이가 날 수 있는데 이러한 부분들은 코드리뷰를 통해 차이를 좁히는 것 보다는 문서나 교육자료를 통해 좁히는게 좋다.코드는 도메인, 기능,..
dp조져... https://www.acmicpc.net/problem/2565 서로 교차하지 않게 하기 위해 없애야 하는 전깃줄의 최소 개수를 구해야 하는데, 그렇다면 현재 교차하고 있는 전깃줄은 어떻게 알 수 있을까? 편하게 보기 위해 A 기준으로 오름차순 정렬한다.[(1, 8), (2, 2), (3, 9), (4, 1), (6, 4), (7, 6), (9, 7), (10, 10)]A1 - B8A2 - B2A3 - B9...처럼 연결되어 있을 때 A가 증가하는 만큼 B도 증가되어야 하는데 그렇지 않은 경우(B8, B2) 선이 교차됨을 알 수 있다.A는 이미 순차적으로 정렬되어 있으니, B만 증가하는지 보면 되고 이게 가장 길 경우 교차되지 않을 수 있는 선의 개수가 된다. 그리고 이건 최장 증가 부..
SOLID 원칙은 로버트.C.마틴(Robert C. Martin)이 객체 지향 설계에서 흔하게 발생하는 문제들을 해결하기 위해 제안한 방식이다. 객체지향 프로그래밍은 문조를 잘 구조화 하고 코드를 재사용할 수 있게 도와주지만, 설계가 복잡 해 질 수 있다. 특히 시스템이 커지면 모듈 간의 의존성이 복잡하게 얽히기 때문에, 유지보수나 확장이 어려워지는 문제가 발생하여 이를 해결하기 위해 제시한 가이드라인이다. * 로버트.C.마틴은 클린 코드의 저자로 SOLID 원칙을 어떻게 코드단에서 적용하는지는 클린 코드 책을 보면 이해에 도움이 될 것이당. SOLID 원칙?Single Responsibility Principle (SRP) - 단일 책임 원칙각 클래스는 하나의 기능에 대해서만 책임을 가진다❌ 하나의 클..
https://www.acmicpc.net/problem/1062읽어야 할 단어가 주어지고, k개의 글자(알파벳)을 가르칠 때 어느 알파벳 k개를 가르쳐야 읽을 수 있는 단어의 개수가 최대가 되는지 찾는 문제주어지는 단어는 모두 anta로 시작하고 tica로 끝난다.주어진 조건에서 모든 단어는 a, c, i, n, t가 포함되어야 하므로 가르칠 수 있는 알파벳 개수가 5개 이하이면 모든 단어를 읽지 못한다.또한 k가 모든 알파벳을 배울 수 있는 26이상이면 어떤 단어든 읽을 수 있으므로 이 두가지의 경우를 선 처리하여 조금이나마 시간을 줄였음(근데 큰 의미 없는듯) import sysn, k = map(int, sys.stdin.readline().split())words = [sys.stdin.read..
배열에서 특정 구간의 합을 구할때는 보통 반복문(기본), 누적합 배열(구간의 합을 여러번 구할 때)을 이용한다. 하지만 배열의 값이 빈번하게 바뀐다면? 매번 배열이 변경될 때마다 전체 누적합 배열을 다시 계산해야 하므로 비효율적이다. 세그먼트 트리는 특정 원소가 변경될 때 O(logN)으로 데이터를 변경으로 합을 변경할 수 있어, 자주 변하는 데이터에 대한 구간 합 계산이 필요할 때 사용한다. 세그먼트 트리는 이진트리이며 각 노드는 특정구간을 대표한다. 구현방식 재귀비재귀장점확장성이 뛰어남구현간단하고 작동이 빠르다단점구현이 상대적으로 길다작동이 느리다간단한 형태만 구현 가능 예시) 2042 예제 1 사용 (재귀)① 세그먼트(구간합) 트리 생성하기tree = [0, 15, 6, 9, 3, 3, 4, 5,..
https://www.acmicpc.net/problem/1987문제에서 알파벳의 사용여부를 비트마스킹을 이용해 기록하는 부분이 있는데, 비트마스킹... 이해가 잘 가지 않아 정리함예시는 위 문제의 알파벳 사용여부를 기록하는 것으로 사용함.비트마스크컴퓨터는 내부 모든 자료를 이진수(0과1)로 표현한다. 이를 이용하여 자료구조로 쓰는 기법을 비트마스크라고 한다. 비트 연산은 O(1)으로 빠르고, 만약 10개의 수가 있다면 2^10가지의 경우(각 자리의 숫자가 0/1이 되는 경우의 수)를 10bit 이진수 하나로 표현이 가능하기 때문에 1987 같은 문제에서 사용하면 시간과 메모리측면에서 도움이 된다. 결국 list에 True/False를 넣어 n번째 수가 True/False이냐를 나타내는 것과 같으나 연산..
https://www.acmicpc.net/problem/2579계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 즉, 한 계단을 밟으면서 이어서 다음 계단이나, 다음 다음 계단으로 오를 수 있다.연속된 세 개의 계단을 모두 밟아서는 안 된다. 단, 시작점은 계단에 포함되지 않는다.마지막 도착 계단은 반드시 밟아야 한다.따라서 첫 번째 계단을 밟고 이어 두 번째 계단이나, 세 번째 계단으로 오를 수 있다. 하지만, 첫 번째 계단을 밟고 이어 네 번째 계단으로 올라가거나, 첫 번째, 두 번째, 세 번째 계단을 연속해서 모두 밟을 수는 없다.해당 조건들을 고려해서 점화식을 작성하면 된다.1. 한번에 한 계단 또는 두 계단씩만 오르게 하기 + 연속된 세 개의 계단 밟지 않기[10, 20, 15, (2..
지식내용 정리 시 블로그 글 발행보다 노션을 자주 쓰게 되는 이유 1. 발행 -> 수정 및 글 추가가 번거로움... 뭔가 한번 글을 발행하면 수정하지 않아야 될 것 같다는 개인적인 느낌도 듦1-1. 평소 글을 작성하는 스타일이 우선 만들어 놓고 여러 날에 걸쳐 공부하며 추가하는 방식임1-2. 완성된다면 블로그로 이관하는게 제일 적절한 방법인듯.1-3. 이관 주기를 당기기 위해서는 더 많은 공부로 하나의 포스팅을 완성하는 기간이 짧아야 함띄엄띄엄 하지말고 매일매일 열심히 공부하자 2. 마음에 드는 스킨이 없음...간결하면서도 내가 쓰기 편한 스킨이 존재하지 않음2-1. 스킨은 생각중인데 너무 많이 뜯어고쳐야 해서 이럴거면 git 블로그가 더 낫겠다는 생각이 듬..2-2. 하지만 티스토리를 일단 입맛대로 고..
요청방법 ~.http 파일생성후 하단처럼 작성 ### 주석은 #3개로 작성 GET http://:8080/hellp?name=Spring ### 헤더 Content-Type: application/json ### 바디 { "ex1": "body1", "ex2": "body2" } 응답 http://localhost:8080/hello?name=Spring HTTP/1.1 200 Content-Type: text/plain;charset=UTF-8 Content-Length: 12 Date: Sat, 20 Jan 2024 11:35:08 GMT Keep-Alive: timeout=60 Connection: keep-alive Hello Spring Response code: 200; Time: 502ms;..