72413
날짜: 2022년 5월 26일 오후 7:39 코드 Algorithm/72413.py at main · Junroot/Algorithm 풀이 플로이드 워셜을 사용해서 각 지점 사이의 요금을 계산해두고, 무지와 어피치가 택시를 따로 타는 모든 경우를 비교해서 최소값을 찾으면 된다.
날짜: 2022년 5월 26일 오후 7:39 코드 Algorithm/72413.py at main · Junroot/Algorithm 풀이 플로이드 워셜을 사용해서 각 지점 사이의 요금을 계산해두고, 무지와 어피치가 택시를 따로 타는 모든 경우를 비교해서 최소값을 찾으면 된다.
날짜: 2022년 5월 26일 오후 7:37 코드 Algorithm/72412.py at main · Junroot/Algorithm 풀이 처음에는 db를 생각해서 점수를 기준으로 데이터를 한번 거르고, 그 중에서 값을 필터링했다. 하지만 이 방법은 시간 초과가 발생했다. 두 번째로 생각한 것은 개발언어, 직군, 경력, 소울푸드의 조합이 3_2_2*2 밖에 되지 않기 때문에 이를 이용해서 1차적으로 분류하고 점수별 필터링을 바이너리 서치로 구하는 방법을 사용했다. 이방법을 사용하면 각 속성별로 분류하는 과정을 꽤 줄일 수 있어서 시간초과가 발생하지 않았다.
날짜: 2022년 5월 26일 오후 7:35 코드 Algorithm/72411.py at main · Junroot/Algorithm 풀이 course 에 주어진 길이들의 조합을 dictionary를 이용해 개수를 센다. 길이별로 나눠서 세면 쉽게 구할 수 있다.
날짜: 2022년 5월 25일 오후 6:23 코드 Algorithm/72410.py at main · Junroot/Algorithm 풀이 단순 구현 문제다. 문제 조건에 맞게 구현해주면 된다.
응용 계층의 역할 서비스를 요청하는 측을 클라이언트, 서비스를 제공하는 측을 서버라고 한다. 클라이언트에서 제공하는 애플리케이션과 서버에서 사용하는 서버 프로그램 간에 통신하기 위해 응용 계층의 프로토콜을 사용한다. 응용 계층의 주요 프로토콜에는 HTTP, FTP, DNS, SMTP, POP3 등이 있다. 웹 서버의 구조 (웹 사이트 접속) WWW는 W3나 웹이라고도 불린다. WWW는 HTML, URL, HTTP라는 세가지 기술이 사용된다. HTML은 하이퍼텍스트를 작성하는 마크업 언어로 태그를 사용하여 문장 구조나 이미지 파일을 표시한다. 하이퍼텍스트로는 문장이나 이미지를 표시하거나 하이퍼링크를 사용할 수 있다....
관례(convention): 어떤 언어 기능과 미리 정해진 이름의 함수를 연결해주는 기법 예: 어떤 클래스 안에 plus라는 이름의 메소드를 정의하면 그 클래스의 인스턴스에 대해 + 연산자를 사용할 수 있다. 이유: 기존 자바 클래스를 코틀린 언어에 적용하기 위함 산술 연산자 오버로딩 이항 산술 연산 오버로딩 연산자를 오버로딩하는 함수 앞에는 꼭 operator 키워드가 있어야 한다. data class Point(val x: Int, val y: Int) { operator fun plus(other: Point): Point { return Point(x + other....
누가 명세를 작성합니까? 팀 내에 프로그래머가 n명 있다면, 상호 대화 경로는 결국 O(n^2)이 된다. 마이크로소프트 사에서는 마스터 프로그래머 개념을 사용했다. 마스터 프로그래머가 모든 코드를 작성하는 책임이 있으며, 부하 프로그래머로 이뤄진 팀은 단순히 ‘코드 조력자’로 이용한다. 모든 개발자가 서로 이야기할 필요가 없으며, 모든 부하 프로그래머는 상간인 프로그램 관리자 한 명과 이야기하면 되기 때문이다. 상호 대화 복잡성은 O(n)으로 줄어들 것이다. 하지만 누구도 단순한 코드 조력자로만 남기를 원하지 않았다. 프로그램 관리자를 어떻게 뽑을까요? 코드 개발자를 프로그램 관리자로 승급시키지 마세요....
최적화를 초기 단계에서부터 하는 것은 얻는 것보다 잃는 것이 많은 경우가 많다. 가독성과 성능 사이에서 트레이드 오프가 발생할 때, 개발하는 컴포넌트에서 무엇이 더 중요한지 스스로 답할 수 있어야 한다. 불필요한 객체 생성을 피하라 객체 생성은 언제나 비용이 들어간다. JVM에서는 하나의 가상 머신에서 동일한 문자열을 처리하는 코드가 여러개 있다면, 기존의 문자열을 재사용한다. Integer나 Long처럼 박스화한 기본 자료형도 작은 경우에는 재사용한다. (기본적으로 Int는 -128~127 범위를 캐시해 둔다.) 객체 생성 비용은 항상 클까?...
메모리 관리의 개요 메모리 관리의 복잡성 메모리의 구조는 1B 크기로 나뉜다. 1B로 나뉜 각 영역은 메모리 주소로 구분하는데 보통 0번지부터 시작한다. CPU는 메모리에 있는 내용을 가져오거나 작업 결과를 메모리에 저장하기 위해 메모리 주소 레지스터(MAR)를 사용한다. 폰노이만 구조의 컴퓨터에서 메모리는 유일한 작업 공간이며 모든 프로그램이 메로리에 올라와야 실행이 가능하다. 운영체제도 메모리에 올라와야 실행할 수 있다. 운영체제를 비롯해 여러 작업을 동시에 처리하는 복잡한 메모리 관리는 메모리 관리 시스템(Memory Management System, MMS)이 담당한다. 메모리 관리의 이중성 메모리 관리의 이중성: 프로세스 입장에서 작업의 편리함과 관리자 입장에서 관리의 편리함이 충돌을 일으키는 것 소스코드의 번역과 실행 저급 언어: 기계어와 어셈블리어같이 컴퓨터의 동작을 가장 직접적으로 표현한 언어...
리팩터링할 코드 식별하기 코드의 네 가지 유형 모든 프로덕션 코드는 2차원으로 분류할 수 있다. 복잡도 또는 도메인 유의성 복잡도: 코드 내 의사 결정 지점 수로 정의한다. 도메인 유의성: 코드가 프로젝트의 문제 도메인에 대해 얼마나 의미 있는지를 나타낸다. 복잡한 콤드와 도메인 유의성을 갖는 코드가 단위 테스트에서 가장 이롭다. 협력자 수: 가변 의존성이거나 프로젝트 외부 의존성이다. 도메인 모델이라면 프로세스 외부 협력자를 사용하면 안 된다. 테스트에서 목 체계가 복잡하기 때문에 유지비가 더 든다. 네 가지 코드 유형 도메인 모델과 알고리즘 도메인 모델 또는 복잡한 알고리즘 단위 테스트 하면 가장 이롭다....
스프링 애플리케이션이 REST API를 사용하는 방법들 RestTemplate: 스프링 프레임워크에서 제공하는 간단하고 동기화된 REST 클라이언트 Traverson: 스프링 HATEOAS에서 제공하는 하이퍼링크를 인식하는 동기화 REST 클라이언트로 같은 이름의 자바스크립트 라이브러리로부터 비롯된 것이다. WebClient: 스프링 5에서 소개된 반응형 비동기 REST 클라이언트 RestTemplate로 REST 엔드포인트 사용하기 JDBC를 사용을 JdbcTemplate이 처리하듯이, RestTempalte은 REST 리소스를 사용할는데 번잡한 일을 처리해준다. RestTemplate은 REST 리소스와 상호작용하기 위한 41개의 메서드를 제공한다. 고유한 작업을 수행하는 메서드는 12개이고, 나머지는 이 메서드의 오버로딩된 버전이다....
날짜: 2022년 5월 5일 오후 4:07 코드 Algorithm/67260.py at main · Junroot/Algorithm 풀이 9328 위 문제와 같은 유형이다. 다음에 방문할 방이 잠겨있으면 열수있는 방에 방문했었는지 확인하고, 방문하지 않았다면 대기방에 추가해두면 된다.
날짜: 2022년 5월 4일 오후 5:19 코드 Algorithm/67259.py at main · Junroot/Algorithm 풀이 자동차가 좌회전이나 우회전을 하면 500원이라는 추가적인 비용이 드는 dp를 이용한 bfs 문제로 풀 수 있다. 기본적은 bfs와 차이점은 현재 자동차의 방향에 따라 비용이 달라지기 때문에 dp로 문제를 풀 때 현재 자동차의 방향에 따라 다르게 캐싱을 해야된다. 구현을 하다가 한가지 실수한 점이 있는데, 자동차가 좌회전이나 우회전을 할 경우 코너만 추가되는 것이아니라 코너 1개 + 직선 도로 1개 가 추가 되는 것이므로 600원이 추가되어야한다....
날짜: 2022년 3월 11일 오후 11:09 코드 Algorithm/67258.py at main · Junroot/Algorithm 풀이 투 포인터로 문제를 풀면 된다. start와 end 인덱스를 두고 start부터 시작하여 모든 보석을 가질 수 있는 end를 1씩 늘리면서 찾는다. 그 다음 start를 1늘리고 end를 다시 1씩 늘리며 찾는다. 보석의 개수를 세기위해 dictionary를 사용했다. 모든 보석이 있는지 확인하기 위해 dictionary의 모든 value 값을 곱해서 0이 아닌지 확인했는데 시간초과가 발생해서, 현재 dictionary에 value가 0인 보석을 저장하는 set을 별도로 만들어서 관리했다....
날짜: 2022년 5월 4일 오후 5:11 코드 Algorithm/67257.py at main · Junroot/Algorithm 풀이 모든 우선 순위의 경우를 다 계산해보고 가장 큰 값을 찾으면 된다. 문자열로 담긴 수식을 계산하는 것을 stack을 이용했다.
날짜: 2022년 5월 4일 오후 5:08 코드 Algorithm/67256.py at main · Junroot/Algorithm 풀이 단순한 구현 문제다. 문제에 명시되 여러 분기들을 조건문으로 나누어서 해결하면 된다.
날짜: 2022년 5월 6일 오후 8:03 코드 Algorithm/64062.py at main · Junroot/Algorithm 풀이 연속으로 k개의 돌이 숫자가 0이되는 순간을 찾는 문제다. 이를 해결하기 위해서 각 구간별로 ‘모든 돌이 0이되는데 걸리는 시간’을 구하고 이중 가장 작은 값을 찾았다. 이렇게 문제를 바꾸어 풀게되면 stones배열을 순차적으로 탐색하여 현재 구간에서 가장 큰 숫자를 찾는 과정을 구현하면 됐다. 이 문제는 dictionary와 priority queue를 사용해서 해결했다.
날짜: 2022년 5월 6일 오후 8:02 코드 Algorithm/64065.py at main · Junroot/Algorithm 풀이 집합의 길이를 기준으로 정렬을 한 뒤, 차집합을 이용해 튜플을 구하면된다. 다른 사람 풀이를 보니 문자열을 통해 집합을 구할 때, split을 이용하는 방법도 있었다.
날짜: 2022년 3월 11일 오후 12:58 코드 Algorithm/64064.py at main · Junroot/Algorithm 풀이 크게 두 가지 문제로 나눌 수 있다. 제재 아이디에 매칭되는 아이디들 구하기 나올 수 있는 아이디의 조합 구하기 1번 문제는 간단한 문자열 비교 문제니 설명하지 않겠다. 2번 문제를 해결하기 위해서 각 제재 아이디가 매칭될 수 있는 아이디의 인덱스를 저장해두고, 각 제재 아이디 별로 아이디를 하나씩 선택는 경우의 수를 구했다. 이때 아래의 두 가지 조건을 조심해야되는데 이를 놓쳤다....
날짜: 2022년 5월 6일 오후 8:02 코드 Algorithm/64063.py at main · Junroot/Algorithm 풀이 다음 방정보를 구하는 과정을 캐싱을 통해 저장할 수 있다. 처음에는 list를 통해 캐싱을 했는데 k의 범위가 10^12이므로 이는 문제가 된다. 이를 해결하기위해 dictionary를 사용하여 실제로 캐싱이 필요한 정보만 저장하는 방식으로 구현했다.