67259

날짜: 2022년 5월 4일 오후 5:19 코드 Algorithm/67259.py at main · Junroot/Algorithm 풀이 자동차가 좌회전이나 우회전을 하면 500원이라는 추가적인 비용이 드는 dp를 이용한 bfs 문제로 풀 수 있다. 기본적은 bfs와 차이점은 현재 자동차의 방향에 따라 비용이 달라지기 때문에 dp로 문제를 풀 때 현재 자동차의 방향에 따라 다르게 캐싱을 해야된다. 구현을 하다가 한가지 실수한 점이 있는데, 자동차가 좌회전이나 우회전을 할 경우 코너만 추가되는 것이아니라 코너 1개 + 직선 도로 1개 가 추가 되는 것이므로 600원이 추가되어야한다....

2024-09-15 · 1 min · 75 words

67258

날짜: 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을 별도로 만들어서 관리했다....

2024-09-15 · 1 min · 87 words

67257

날짜: 2022년 5월 4일 오후 5:11 코드 Algorithm/67257.py at main · Junroot/Algorithm 풀이 모든 우선 순위의 경우를 다 계산해보고 가장 큰 값을 찾으면 된다. 문자열로 담긴 수식을 계산하는 것을 stack을 이용했다.

2024-09-15 · 1 min · 31 words

67256

날짜: 2022년 5월 4일 오후 5:08 코드 Algorithm/67256.py at main · Junroot/Algorithm 풀이 단순한 구현 문제다. 문제에 명시되 여러 분기들을 조건문으로 나누어서 해결하면 된다.

2024-09-15 · 1 min · 24 words

65062

날짜: 2022년 5월 6일 오후 8:03 코드 Algorithm/64062.py at main · Junroot/Algorithm 풀이 연속으로 k개의 돌이 숫자가 0이되는 순간을 찾는 문제다. 이를 해결하기 위해서 각 구간별로 ‘모든 돌이 0이되는데 걸리는 시간’을 구하고 이중 가장 작은 값을 찾았다. 이렇게 문제를 바꾸어 풀게되면 stones배열을 순차적으로 탐색하여 현재 구간에서 가장 큰 숫자를 찾는 과정을 구현하면 됐다. 이 문제는 dictionary와 priority queue를 사용해서 해결했다.

2024-09-15 · 1 min · 60 words

64065

날짜: 2022년 5월 6일 오후 8:02 코드 Algorithm/64065.py at main · Junroot/Algorithm 풀이 집합의 길이를 기준으로 정렬을 한 뒤, 차집합을 이용해 튜플을 구하면된다. 다른 사람 풀이를 보니 문자열을 통해 집합을 구할 때, split을 이용하는 방법도 있었다.

2024-09-15 · 1 min · 36 words

64064

날짜: 2022년 3월 11일 오후 12:58 코드 Algorithm/64064.py at main · Junroot/Algorithm 풀이 크게 두 가지 문제로 나눌 수 있다. 제재 아이디에 매칭되는 아이디들 구하기 나올 수 있는 아이디의 조합 구하기 1번 문제는 간단한 문자열 비교 문제니 설명하지 않겠다. 2번 문제를 해결하기 위해서 각 제재 아이디가 매칭될 수 있는 아이디의 인덱스를 저장해두고, 각 제재 아이디 별로 아이디를 하나씩 선택는 경우의 수를 구했다. 이때 아래의 두 가지 조건을 조심해야되는데 이를 놓쳤다....

2024-09-15 · 1 min · 146 words

64063

날짜: 2022년 5월 6일 오후 8:02 코드 Algorithm/64063.py at main · Junroot/Algorithm 풀이 다음 방정보를 구하는 과정을 캐싱을 통해 저장할 수 있다. 처음에는 list를 통해 캐싱을 했는데 k의 범위가 10^12이므로 이는 문제가 된다. 이를 해결하기위해 dictionary를 사용하여 실제로 캐싱이 필요한 정보만 저장하는 방식으로 구현했다.

2024-09-15 · 1 min · 44 words

64061

날짜: 2022년 5월 6일 오후 8:01 코드 Algorithm/64061.py at main · Junroot/Algorithm 풀이 stack을 이용하면 되는 문제다. 복잡한 로직은 필요하지 않다.

2024-09-15 · 1 min · 21 words

60063

날짜: 2022년 6월 29일 오후 1:39 코드 Algorithm/60063.py at main · Junroot/Algorithm 풀이 BFS를 통해 최소 경로를 탐색하면된다. 여기서, 로봇이 이동할 수 있는 경우를 체크하는 과정이 조금 복잡하다. 조건문을 이용한 분기처리로 구현해야된다.

2024-09-15 · 1 min · 32 words

60062

날짜: 2022년 6월 28일 오후 3:58 코드 Algorithm/60062.py at main · Junroot/Algorithm 풀이 결론부터 말하면 완전탐색이다. 나같은 경우는 dist가 가장 큰 값의 위치를 먼저 선택한 뒤, 원형을 직선으로 변환한 뒤 직선 형태로 만든 뒤 가장 적은 사람이 필요한 경우를 찾았다. 이렇게 하면 점화식 형태로 문제를 풀 수 있기 때문이다.

2024-09-15 · 1 min · 49 words

60061

날짜: 2022년 6월 28일 오후 3:54 코드 Algorithm/60061.py at main · Junroot/Algorithm 풀이 문제 조건을 그대로 구현하는 시뮬레이션 문제다. 구조물을 제거할 때는 일단 제거하고 자신이 영향을 줄 수 있는 구조물들을 ‘구조물을 추가할 때의 조건’을 만족하는지를 체크했다.

2024-09-15 · 1 min · 36 words

60060

날짜: 2022년 6월 28일 오후 3:52 코드 Algorithm/60060.py at main · Junroot/Algorithm 풀이 바이너리 서치를 이용해서 문제를 풀었다. words를 정렬한 뒤, 쿼리를 만족하는 word를 lower bound와 upper bound의 차로 개수를 구했다. 쿼리와 단어를 비교하는 법은 아래와 같다. 글자 길이가 다른 경우 길이가 더 짧은 것을 작은 값으로 취급 글자 길이가 같은 경우 사전순 비교 쿼리에 ?가 나온 순간부터 같은 단어로 취급(접미사가 ?인 경우를 고려해서다. 접두사의 경우는 처리하지 않았다. 위 방식대로 하면 접두사에 ?...

2024-09-15 · 2 min · 306 words

60059

날짜: 2022년 3월 8일 오후 3:47 코드 Algorithm/60059.py at main · Junroot/Algorithm 풀이 단순히 모든 경우의 수를 다 구해보면 되는 문제다. 겹쳐지는 부분 계산을 좀 신경써야되는데, 특정 lock위치에 대한 key의 위치값 차이를 delta로 두고 모든 가능한 delta값을 루프를 돌면서 탐색했다.

2024-09-15 · 1 min · 40 words

60058

날짜: 2022년 6월 23일 오전 11:45 코드 Algorithm/60058.py at main · Junroot/Algorithm 풀이 단순 구현문제다.

2024-09-15 · 1 min · 15 words

60057

날짜: 2022년 6월 20일 오전 10:45 코드 Algorithm/60057.py at main · Junroot/Algorithm 풀이 문자열의 길이가 최대 1000밖에 되지 않으므로, 모든 압축 단위를 한 번씩 진행해도 O(n^2)로 시간초과가 발생하지 않을 것이다.

2024-09-15 · 1 min · 30 words

6-클래스 설계

상속보다는 컴포지션을 사용하라 간단한 행위 재사용 재사용을 위해 상속을 사용했을 때 단점 상속은 하나의 클래스만을 대상으로 할 수 있다. 상속을 사용해서 행위를 추출하다 보면, 많은 함수를 갖는 거대한 BaseXXX 클래스를 만들게 되고, 굉장히 깊고 복잡한 계층 구조가 만들어진다. 상속은 클래스의 모든 것을 가져오게 된다. 따라서 불필요한 함수를 갖는 클래스가 만들어질 수 있다. 인터페이스 분리 원칙 위반 상속은 이해하기 어렵다. 작동 방식을 이해하기 위해 슈퍼클래스를 여러 번 확인해야 한다. 재사용을 위해 컴포지션을 사용했을 때 장점 코드의 실행을 더 명확하게 예측할 수 있다....

2024-09-15 · 7 min · 1407 words

6-코틀린 타입 시스템

널 가능성 널 가능성(nullability): NPE를 피할 수 있게 돕기 위한 코틀린 타입 시스템의 특성 코틀린을 비롯한 최신 언어에서 null에 대한 접근 방법은 가능한 한 이 문제를 실행 시점에서 컴파일 시점으로 옮기는 것이다. 널이 될 수 있는 타입[] 모든 타입은 기본적으로 널이 될 수 없는 타입이다. 널을 받을 수 있게 하려면 타입 이름 뒤에 물음표(?)를 명시해야 한다. 널이 될 수 있는 타입의 변수가 있다면 그에 대해 수행할 수 있는 연산이 제한된다. 메소드를 직접 호출할 수 없다....

2024-09-15 · 10 min · 2024 words

6-전송 계층 신뢰할 수 있는 데이터 전송

전송 계층의 역할 전송 계층은 목적지에 신뢰할 수 있는 데이터를 전달하는 역할과 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 역할을 한다. 전송 계층의 특징을 설명하면 신뢰성/정확성과 효율성으로 구분할 수 있다. 신뢰성/정확성: 데이터를 목적지에 문제없이 전달하는 것. 연결형 통신이라고 한다. 연결형 통신은 상대편과 확인해 가면서 통신하는 방식이다. TCP 효율성: 데이터를 빠르고 효율적으로 전달하는 것. 비연결형 통신이라고 한다. 비연결 통신은 상대편을 확인하지 않고 일방적으로 데이터를 전송하는 방식이다. 동영상처럼 효율적인 데이터 전송이 필요한 애플리케이션에서 사용한다....

2024-09-15 · 3 min · 441 words

6-손쉬운 기능명세 작성법 2강 명세가 뭡니까

기능 명세 vs 기술 명세 5장에서 이야기 했던 명세는 기능 명세에 해당한다. 기능 명세(functional specification) 사용자 관점에서 젶무이 어떻게 동작할지를 기술 구현은 신경 쓰지 않는다. 화면, 메뉴, 대화 상자 등 기술 명세(technical specification) 프로그램 내부 구현을 기술한다. 자료 구조와 관계 형 데이터베이스 모델과 프로그래밍 언어, 도구, 알고리즘 선택과 같은 항목을 다룬다. 명세서에 넣는 단골 항목 면책 조항: 현재 명세가 완벽하지 않다는 것을 알리는 방어적 내용. 저자: 명세에서 무엇인가 잘못된다면, 이를 수정할 책임있는 명세서 소유자를 지정해야 하며, 이 사람 이름이 명세서에 찍혀 있어야 한다....

2024-09-15 · 1 min · 194 words