[TIL #25] 전력망을 둘로 나누기
·
Camp/T.I.L.
https://school.programmers.co.kr/learn/courses/30/lessons/86971 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 이제 이런 DFS 문제는 그렇게까지 부담스럽진 않은 것 같다.노드가 연결돼 있는 걸 뜯어보는 데엔 인접리스트가 좋은 방법이 될 것이다. 이런 네트워크가 있다고 했을 때, 어디를 끊어야 최대한 균형이 맞는 형태로 망을 나눌 수 있을 것인가?위 그림에선 [3, 4]나 [4, 7]이 유이한 해가 될 것이다. 모든 연결에 대해 끊어보면서 확인할 수 있을 것 같다.브루트 포스가 무식한 방법일 수도 있지만, 현..
[TIL #24] 행렬 테두리 회전하기
·
Camp/T.I.L.
https://school.programmers.co.kr/learn/courses/30/lessons/77485 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 이러한 행렬이 있다고 가정하자.여기서 특정 부분을 회전해야 하는데, 그 영역은 다음과 같이 주어진다.``(x1, y1, x2, y2)`` 만약 ``(2, 2, 5, 4)``라고 했을 때, 회전은 다음과 같이 이루어져야 한다.좌표는 배열의 실제 인덱스에 1이 더해진 형태로 주어짐을 알 수 있다. 사실 이런 문제만 나오면 쫄기만 했다.다차원 배열의 원소의 위치를 바꾼다는 게 머릿속에 잘 그려지지 않았기 ..
[TIL #23] Product Price at a Given Date
·
Camp/T.I.L.
https://leetcode.com/problems/product-price-at-a-given-date/ 테이블 ``Product``는 어떤 상품의 새로운 가격과 변경된 날짜의 정보를 갖고 있다.``2019-08-16``의 모든 상품의 가격 정보를 가져와야 한다.만약 변경 이력이 없을 경우 10으로 간주한다. 문제에서 준 예시는 이렇다. 이걸 보면서 생각을 해 보자. 일단 ``2019-08-16`` 후의 날짜는 다 쳐내야 한다``change_date``를 기준하여 내림차순으로 정렬그리고 ``product_id`` 별 가장 빠른 날자의 가격을 확인 - 여기까지 별도의 쿼리로 둔다이러면 기준 날짜 뒤에만 변경 로그가 있는 상품은 모르게 된다기준 날짜 이전에 변경 로그가 없는 상품 아이디를 찾아 가격에 `..
[TIL #22] 실시간으로 달리는 공룡
·
Camp/T.I.L.
크롬 주소창에 ``chrome://dino/``를 입력하여 플레이할 수 있는 플랫포머 공룡 게임이 있다.군대에 있을 때, 종종 하곤 했는데 이렇게 다시 만날 줄이야... ``Socket.io``를 이용해 서버에서 플레이 데이터를 관리하게 하는 게 목표인 프로젝트이다.엎드리기는 없지만, 아이템을 획득해 추가 점수를 얻을 수 있다.이런 데서 오는 난관이 있기 마련.내가 힘들었던 부분은 다음과 같다.  1. 아이템 생성 및 검증기존엔 아이템이 무분별하게 생성됐다.모든 스테이지에서 전체 아이템 중에서 랜덤 하게 선택돼 생성됐다.여기선 스테이지 별로 생성되는 아이템을 차별화하고, 그 생성 간격도 관리해야 했다.이 생성 간격은 클라이언트에서만 관리하는 것이 아니라 서버에서 그 검증 또한 수행해야 한다. 일단 클라이..
[TIL #21] 큰 수 만들기
·
Camp/T.I.L.
https://school.programmers.co.kr/learn/courses/30/lessons/42883 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 설명을 제대로 안 봐서 당했던 문제.가장 큰 수 문제가 떠올라서 날먹 문제라고 생각했다.중요한 건 이 문제에선 수의 순서를 바꾸면 안 된다는 것. 자 그럼 어떻게 해결해야 할까?수의 순서를 바꿀 수 없다 - 달리 말하면 바꿀 필요가 없으니 편하다는 의미기도 하다.순서를 바꿀 수 없으니 그냥 앞에서부터 비교한다``k``개의 숫자를 원본 수에서 제거해야 한다 - 몇 개의 숫자를 제거했는지 카운트하는..
[TIL #20] 쿼드압축 후 개수 세기
·
Camp/T.I.L.
https://school.programmers.co.kr/learn/courses/30/lessons/68936 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 쿼드압축도 몰랐고, 쿼드트리도 처음 봤다.뭔데 이게...일단 문제에 쿼드트리의 위키피디아 링크가 걸려 있으니 그걸 보자. 쿼드트리는 각 내부 노드에 정확히 4개의 자식이 있는 트리 데이터 구조입니다.쿼드트리는 옥트리의 2차원 아날로그이며,2차원 공간을 4개의 사분면 또는 영역으로 재귀적으로 세분화하여 분할하는 데 가장 자주 사용됩니다. 모든 형태의 쿼드트리는 몇 가지 공통된 특징을 공유합니다:공간을 ..
[TIL #19] 다리를 지나는 트럭
·
Camp/T.I.L.
https://school.programmers.co.kr/learn/courses/30/lessons/42583 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  이 문제를 보고 위의 이미지부터 떠올랐다.열린계라고 생각했을 때, 늘어나는 무게는 없다고 해도 될 정도로 미미하다.하지만 물의 무게는 여전히 크다.이걸 잘 생각하면서 다리를 만들어야 한다.이건 우리가 일상적으로 차량을 통해 이용하는 다리에도 적용되는 개념이다. 이 문제는 그러한 다리의 한계 하중을 초과하지 않고 어떻게 트럭을 다 반대편으로 옮길지 고민하는 문제.모든 트럭을 보내기 위해 최소 몇 사이..
[TIL #18] 2개 이하로 다른 비트
·
Camp/T.I.L.
https://school.programmers.co.kr/learn/courses/30/lessons/77885 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 비트를 다루는 문제.결국 현대의 컴퓨터는 이진수로 동작하기 때문에,비트 연산에 대해 잘 알아둘 필요가 있다.그만큼 그 성질을 잘 이해하고 사용할 필요가 있다.이번에도 엄청 헤맸다... 일단 이 문제는 정수 ``x``에 대해 해밍거리가 2 이하인 수 중에서 가장 작은 수를 찾는 문제다.즉, 몇 개의 비트가 차이가 나는지 비교해 볼 필요가 있다.C++이라면 ``std::bitset::count`` 같은 ..
[TIL #17] 롤케이크 자르기
·
Camp/T.I.L.
https://school.programmers.co.kr/learn/courses/30/lessons/132265 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 롤케이크 하면 떠오르는 모 캐릭터가 있지만 여기서 꺼낼 건 아니니 넘어가자... 롤케이크 위에 토핑이 있고, 두 사람이 이를 균등히 나눌 수 있는 경우의 수를 모두 찾는 문제.그 길이는 최대 1백만이고, 개수는 최대 1만이다.아니 뭘 이리 많이 먹어... 길이가 최대 1백만이라 2중 for문은 절대 사용해선 안된다.단일 for문만을 사용하여 문제를 풀어야 하겠다.양 쪽의 경우에 대해서 생각해야 하니..
[TIL #16] 모음사전
·
Camp/T.I.L.
https://school.programmers.co.kr/learn/courses/30/lessons/84512 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr DFS로 풀면 되는 문제긴 하다.출제도 완전탐색을 통해 푸는 것을 의도했을 것이다. 의도대로 DFS를 통해 작성하면 다음과 같다.function dfs(word, vowels, current, state) { if (state.found) return; // 목표 단어를 찾은 경우 탐색 종료 for (let i = 0; i 단어의 길이가 최대 5이기 때문에 완전탐색임에도 부담이 없다.뭐 이..