92342

날짜: 2022년 5월 18일 오후 10:09 코드 Algorithm/92342.py at main · Junroot/Algorithm 풀이 두 가지 문제로 나눠서 생각할 수 있다. 어피치와 라이언의 점수 차이 계산하기 점수차이를 최대로 나도록 라이언이 쏘는 방법 구하기 어피치와 라이언 점수 차이를 계산하기 위해서 어피치가 점수를 얻은 영역에 더 많이 맞추면 점수를 2배로 얻는 것으로 구현을 했다. 어피치가 점수를 잃고 라이언이 점수를 얻는 것이 결국 라이언이 점수를 2배로 얻는 것과 같기 때문이다. 점수차이를 최대로 나는 경우를 찾기 위해서 dfs를 이용해서 모든 경우를 탐색하도록 구현했다....

2024-09-15 · 1 min · 114 words

92341

날짜: 2022년 5월 16일 오후 2:40 코드 Algorithm/92341.py at main · Junroot/Algorithm 풀이 단순 구현 문제다. record 정보를 파싱해서 원하는 데이터 형태로 저장한다. 시간 정보는 0시 0분을 기준으로 지나간 시간을 분 단위로 저장했다. 차량 정보는 dictionary를 통해서 저장을 해두고 최종적으로 반환을 할 때는 정렬을 시켰다.

2024-09-15 · 1 min · 45 words

92334

날짜: 2022년 5월 9일 오후 2:14 코드 Algorithm/92334.py at main · Junroot/Algorithm 풀이 자신을 신고한 유저들을 저장해서 개수를 세면된다.

2024-09-15 · 1 min · 19 words

9095

편집 시간: 2022년 2월 9일 오후 6:18 코드 Algorithm/9095.py at main · Junroot/Algorithm 풀이 정수 n을 1, 2, 3의 합으로 나타낼 수 있는 경우의 수를 f(n)이라고 했을 때, f(n) = f(n - 1) + f(n - 2) + f(n -3) 라는 점화식이 만들어지는 것을 확인할 수 있으면 된다. 마지막에 더해지는 수가 1인 경우의 수는 f(n-1)이고, 2인 경우는 f(n-2), 3인 경우는 f(n-3)이기 때문이다.

2024-09-15 · 1 min · 62 words

9012

편집 시간: 2022년 1월 31일 오후 5:52 코드 Algorithm/9012.py at main · Junroot/Algorithm 풀이 현재 열린 괄호의 개수를 깊이(depth)라고 하고, 문자열을 읽으면서 깊이가 음수가 되는 지점을 확인하면 된다. 또한, 문자열이 끝났을 때 깊이가 0으로 끝나는지 확인하면 된다.

2024-09-15 · 1 min · 37 words

9-제네릭스

실체화한 타입 파라미터(reified type parameter)를 사용하면 인라인 함수 호출에서 타입 인자로 쓰인 구체적인 타입을 실행 시점에 알 수 있다. 일반 클래스나 함수의 경우 타입 인자 정보가 실행 시점에 사라지기 때문에 구체적인 타입을 알 수 없다. 선언 지점 변성(declaration-site variance)을 사용하면 기저 타입은 같지만 타입 인자가 다른 두 제네릭 타입이 있을 때, 타입 인자의 상위/하위 타입 관계에 따라 두 제네릭 타입의 상위/하위 타입 관계가 어떻게 되는지 지정할 수 있다. 제네릭 타입 파라미터 제네릭 타입의 인스턴스를 만들려면 타입 파라미터를 구체적인 타입 인자로 치환해야 한다....

2024-09-15 · 6 min · 1251 words

9-옵티마이저와 힌트

옵티마이저의 기능: 쿼리를 최적으로 실행하기 위해 각 테이블의 데이터가 어떤 분포로 저장돼 있는지 통계 정보를 참조하며, 그러한 기본 데이터를 비교해 최적의 실행 계획을 수립한다. EXPLAIN 명령으로 쿼리의 실행 계획을 확인할 수 있다. 개요 쿼리 실행 절차 SQL 파싱: 사용자로부터 요청된 SQL 문장을 잘게 쪼개서 MySQL 서버가 이해할 수 있는 수준으로 분리(파스 트리)한다. SQL 파서라는 모듈에서 처리한다. 최적화 및 실행 계획 수립: SQL의 파싱 트리를 확인하면서 어떤 테이블부터 읽거 어떤 인덱스를 이용해 테이블을 읽을지 선택한다....

2024-09-15 · 10 min · 2054 words

9-스프링 통합하기

외부 시스템에서 데이터를 읽거나 쓸 때 애플리케이션에서 필요한 형태로 변경하기 위해 어떻게 하든 데이터 처리가 필요할 수 있다. 스프링 통합(Spring Integration)은 Enterprise Integration Patterns라는 책에서 보여준 대부분의 통합 패턴을 사용할 수 있게 구현한 것이다. 각 통합 패턴은 하나의 컴포넌트로 구현되며, 이것을 통해서 파이프라인으로 메시지가 데이터를 운반한다. 간단한 통합 플로우 선언하기 애플리케이션은 통합 플로우를 통해서 외부 리소스나 애플리케이션 자체에 데이터를 수신 또는 전송할 수 있다. 스프링 통합은 통합 플로우를 생성할 수 있게 해준다....

2024-09-15 · 5 min · 971 words

9-손쉬운 소프트웨어 일정관리법

누구도 일정을 짜지 않는 이유 일정을 짜는 작업 자체가 고통스럽다. 아무도 일정을 짜는 작업에 의미가 있다고 생각하지 않는다. 일정은 항상 틀린다는 선입견이 있다. 일정을 손쉽게 잘 짜는 방법 마이크로소프트 엑셀을 사용합시다 단순하게 만듭니다 각 기능은 과업 여러 개를 포함해야만 합니다 담당 프로그래머만이 제대로 일정을 짤 수 있습니다 과업을 세부적으로 나누십시오 과업을 세부적으로 쪼개다보면, 어떻게 진행할지 구체적인 단계를 생각하게 된다. 세부적으로 과업을 나누다보면 기능을 설계하지 않을 수 없게된다. 경험적인 규칙에 따르면, 각 과업은 적게는 2시간에서 많게는 16시간 이내에 처리할 수 있어야한다....

2024-09-15 · 2 min · 266 words

9-무선 랜 이해하기

무선 랜의 구조 랜 케이블을 사용하지않고 컴퓨터를 연결하는 방식을 무선 랜이라고 한다. 무선 랜은 무선 액세스 포인트(Wireless Access Point, WAP)와 무선 클라이언트(컴퓨터나 스마트폰 등)로 구성된다. 우리가 흔히 말하는 무선 공유기에 무선 액세스 포인트 기능이 포함되어 있다. 무선 AP라고 부르기도 한다. 무선 클라이언트가 WAP와 통신하려면 무선 랜 칩과 무선 랜 어댑터가 필요하다. 최근 노트북의 경우 무선 랜 칩을 내장하고 있다. 무선 랜 어댑터는 USB 메모리 방식과 컴퓨터 카드 방식이 있다. 무선 랜을 연결하는 방식에는 2가지가 있다....

2024-09-15 · 2 min · 262 words

9-목 처리에 대한 모범 사례

목의 가치 극대화하기 비관리 의존성에만 목을 사용하게끔 제한하는 것은 중요하지만, 이는 목의 가치를 극대화 하기 위한 첫 번째 단계일 뿐이다. 시스템 끝에서 상호 작용 검증하기 시스템 끝에 있는 비관리 의존성을 목킹하여 상호 작용을 검증하라. 어떤 라이브러리에 대한 래퍼 클래스가 있으면, 래퍼 클래스 내에 있는 라이브러리 클래스를 목으로 검증하라. 시스템의 끝에서 상호 작용을 확인하면 회귀 방지가 좋아질 뿐만 아니라 리팩터링 내성도 향상된다. 목을 스파이로 대체하기 스파이는 수동으로 작성하는 반면에 목은 목 프레임워크의 도움을 받아 생성한다는 것이 차이점이다....

2024-09-15 · 2 min · 316 words

9-가상 메모리 관리

요구 페이징 요구 페이징 개요 요구 페이징: 프로세스가 요구할 때 해당 페이지를 메모리로 가져오는 방식. 미리 가져오기: 앞으로 필요할 것이라고 예상되는 페이지를 미리 가져오는 방식. 요구 페이지 장점 메모리를 효율적으로 관리할 수 있다. 모든 페이지를 메모리로 가져올 필요가 없기 때문에 응답 속도가 빠르다. 페이지 테이블 엔트리의 구조 PTE에는 페이지 번호(주소 영역), 프레임 번호 뿐만 아니라, 플래그 비트가 존재한다. 플래그 비트에는 아래와 같은 비트들이 있다. 접근 비트(access bit): 페이지가 메모리에 올라온 후 사용한 적이 있는지 알려주는 비트....

2024-09-15 · 5 min · 917 words

81305

날짜: 2022년 5월 13일 오후 2:37 오답: o 코드 Algorithm/81305.py at main · Junroot/Algorithm 풀이 문제 해석을 다르게 해야되는 과정이 어려웠다. 모든 간선을 잘라보는 것은 당연히 시간초과가 발생한다. 각 그룹의 인원을 L명 이하로 만들기 위해서 몇 개의 그룹이 필요한지 구하는 문제로 바꾸고, 이 그룹의 수가 처음으로 k가되는 L을 바이너리 서치로 풀어야된다. L의 범위가 (총 인원/ k)~(총 인원) 사이라는 것을 알면 바이너리 서치로 접근할 수 있다. 1번 소문제를 해결하기 위해서 dfs를 이용했다....

2024-09-15 · 1 min · 126 words

81304

날짜: 2022년 5월 3일 오후 5:57 오답: o 코드 Algorithm/81304.py at main · Junroot/Algorithm 풀이 처음에 문제를 이해하는데 시간이 걸렸다. 똑같은 함정 방에 돌아가면 모든 간선의 방향이 원래대로 돌아가는 문제로 이해했다. 현재 방문했던 함정방으로 비트마스크로 표현하는 것까지는 쉽게 접근했다. 하지만 n의 크기가 1000이여서 int 범위 밖의 비트마스크 표현에 문제가 있었다. 이부분은 함정방이 10개이하이므로 좌표 압축을 통해 해결했다. 현재 노드와 이동할 노드에 함정 활성화가 모두 켜저있거나 모두 꺼져있으면 정방향, 하나만 켜져있으면 역방향으로 이동하도록 구현했다....

2024-09-15 · 1 min · 80 words

81303

날짜: 2022년 5월 2일 오후 5:05 코드 Algorithm/81303.py at main · Junroot/Algorithm 풀이 가장 최근에 삭제된 행을 복구하는 기능을 쉽게 구현하기 위해서 처음에는 array를 만들어 soft delete 와 형식으로 구현하려고 했다. 하지만, 이럴 경우 삭제된 행이 많을 때 행을 이동하면 soft delete되어있는 행은 이동한 것으로 간주하면 안되므로 계산량이 늘어나는 문제가 있었다. 이를 해결하기 위해서 LinkedList를 만들어서 문제를 해결했다.

2024-09-15 · 1 min · 58 words

81302

날짜: 2022년 5월 2일 오후 5:01 코드 Algorithm/81302.py at main · Junroot/Algorithm 풀이 대기실의 크기가 5*5로 고정이고 대기실의 개수 또한 5개로 고정이므로 시간복잡도를 크게 고려하지 않아도 해결이 가능하다. 응시자가 앉아 있는 자리를 기준으로 BFS를 통해 길이가 2인 지점 이내에 다른 응시자가 있는지 확인한다.

2024-09-15 · 1 min · 43 words

81301

날짜: 2022년 5월 2일 오후 4:59 코드 Algorithm/81301.py at main · Junroot/Algorithm 풀이 문자열의 길이가 최대 50이므로 어렵지 않다. 문자열을 하나씩 확인해서 숫자로 바꾸면 된다.

2024-09-15 · 1 min · 25 words

8-효율적인 컬렉션 처리

하나 이상의 처리 단계를 가진 경우에는 스퀀스를 사용하라 시퀀스 처리 함수들을 사용하면, 데코레이터 패턴으로 꾸며진 새로운 시퀀스가 리턴된다. 컬렉션 처리 연산은 호출할 때 연산이 이루어지는 반면, 시퀀스 처리 함수는 최종 연산이 이루어지기 전까지는 각 단계에서 연산이 일어나지 않는다. 시퀀스의 지연 처리 장점 자연스러운 처리 순서를 유지한다. 최소한만 연산한다. 무한 시퀀스 형태로 사용할 수 있다. 각각의 단계에서 컬렉션을 만들어 내지 않는다. 순서의 중요성 시퀀스 처리는 요소 하나하나에 지정한 연산을 한꺼번에 적용한다. element-by-element order 또는 lazy order라고 부른다....

2024-09-15 · 3 min · 511 words

8-통합 테스트를 하는 이유

단위 테스트에만 전적으로 의존하면 시스템이 전체적으로 잘 작동하는지 확신할 수 없다. 통합 테스트는 무엇인가? 통합 테스트의 역할 아래 단위 테스트 세 가지 요구 사항중 하나라도 충족하지 못하면 통합 테스트의 범주에 속한다. 단일 동작 단위를 검증하고, 빠르게 수행하고, 다른 테스트와 별도로 처리한다. 단위 테스트는 도메인 모델을 다루는 반면, 통합 테스트는 프로세스 외부 의존성과 도메인 모델을 연결하는 코드(컨트롤러)를 확인한다. 다시 보는 테스트 피라미드 통합 테스트는 유지비가 많이 든다. 프로세스 외부 의존성 운영이 필요함 관련된 협력자가 많아서 테스트가 비대해짐 단위 테스트로 가능한 한 많이 비즈니스 시나리오의 예외 상황을 확인하고, 통합 테스트는 주요 흐름(happy path)과 단위 테스트가 다루지 못하는 기타 예외 상황을 다룬다....

2024-09-15 · 7 min · 1459 words

8-손쉬운 기능명세 작성법 4강 팁

명세 작성자는 개발자가 명세를 읽도록 유도할 필요가 있다. 명세서를 읽도록 사람을 유인하는 방법은 일반적으로 글쓰기 실력과 밀접환 관련이 있다. 규칙1: 재밌게 씁시다 명세를 읽게 유도하는 규칙 1번은 즐거운 경험을 누리게 만드는 것이다. 규칙2: 명세를 쓰는 작업은 머리가 돌아가도록 코드를 쓰는 작업과 유사하다 명세를 쓸 때 놓치기 쉬운 점은, 올바른 작성을 물론이거니와 이해하기 쉽도록 작성해야 한다는 점이다. 사람은 우선 동기부여가 되지 않으면 타인이 말하려는 내용을 이해하려 하지 않는다. 무언가를 해석하기 보다는 단지 순서대로 읽고 이해하기를 원한다....

2024-09-15 · 1 min · 175 words