분류 전체보기(196)
-
그리디 - 설탕배달
백준 2839 문제 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다. 상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다. 상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다. (3 ≤ N ≤ 5000) 출력 상근이가 배달하는 봉지의 최소 개수를 출력한..
2024.02.06 -
개념 정리 - 선택, 버블, 삽입 정렬
정렬 알고리즘의 장점과 선택, 버블, 삽입 정렬의 시간 복잡도에 대한 설명은 아래 참고자료에 자세히 나와있다. 물론 구현 코드도 나와있지만 내가 이해한 생각의 흐름대로 코드 구현 과정을 정리하고 싶었다. https://im-developer.tistory.com/133 [JS/Sorting] 버블 정렬, 삽입 정렬, 선택 정렬 자바스크립트로 구현하기 (Bubble Sort, Insertion Sort, Select Sorting Algorithm 무작위로 섞여있는 데이터를 어떤 기준에 맞춰 정렬하는 알고리즘은 여러 가지가 있다. 정렬 알고리즘은 다양한 경우에 매우 유용하게 사용된다. 각종 데이터 목록을 정리하고 싶 im-developer.tistory.com 가장 베이직한 정렬 문제로 오름차순 정렬을 s..
2024.02.05 -
해쉬, 슬라이딩 윈도우, 투 포인터 - 모든 아나그램 찾기
문제 S문자열에서 T문자열과 아나그램이 되는 S의 부분문자열의 개수를 구하는 프로그램을 작성하세요. 아나그램 판별시 대소문자가 구분됩니다. 부분문자열은 연속된 문자열이어야 합니다. 내 풀이 투포인터를 활용한 슬라이딩 윈도우를 만들어서 아나그램인지 판단하기로 했다. 문자열이 주어지다보니 전에 풀었던 아나그램 예제처럼 베이직한 슬라이딩 윈도우를 사용하기에는 무리가 있었기 때문에 투포인터를 사용해서 슬라이딩 윈도우를 구현해보았다. function isAnagram(str1, str2) { let answer = true; let sH = new Map(); for (let x of str1) { if (sH.has(x)) sH.set(x, sH.get(x) + 1); else sH.set(x, 1); } fo..
2024.02.04 -
해쉬 - 아나그램
두 문자열이 주어지고 아나그램을 찾는 문제이다. 예를 들면 AbaAeCe 와 baeeACA 는 알파벳을 나열 순서는 다르지만 그 구성을 살펴보면 A(2), a(1), b(1), C(1), e(2)로 알파벳과 그 개수가 모두 일치한다. 즉 어느 한 단어를 재배열하면 상대편 단어가 될 수 있는 것을 아나그램이라 한다. 문제 자체는 어렵지 않다. 처음에는 Object를 활용해서 해쉬를 구현했지만 Map을 활용하면 다양한 키값을 활용할 수 있고, Object를 사용하는 것보다 has, get과 같은 Map 자료형에서만 사용할 수 있는 메서드로 코드의 의도를 더 선명하게 드러낼 수 있다. function solution2(str1, str2) { let result = 'YES'; let sH = new Map(..
2024.02.04 -
큐 구현하기 - 연결리스트
백준 18258 참고 이전까지는 자바스크립트 내장 함수인 shift와 push를 이용해서 배열로 큐를 구현했었다. 하지만 shift 메서드 자체가 O(N)의 시간복잡도를 가지고 있기 때문에 데이터의 양이 많아지는 경우에는 비효율적이다. 물론 18258번 문제도 배열을 이용한 큐를 사용하면 통과하지 못한다. 그래서 가장 많이 사용하는 연결 리스트 방법을 이용해서 큐를 직접 구현해보기로 했다. 연결 리스트 방법이 O(1)의 시간복잡도를 가지는 이유는 큐에서 요소가 제거되어도 모든 요소를 탐색해서 끌어올 필요가 없기 때문이다. shift 메서드를 사용하면 배열의 맨 앞의 요소를 제거하고 모든 배열의 요소를 앞으로 끌어오는 과정에서 O(N)의 시간복잡도가 발생하지만 연결리스트는 front와 rear의 위치만 변..
2024.02.02 -
브루트 포스 - 체스판 다시 칠하기
백준 1018번 문제 지민이는 자신의 저택에서 MN개의 단위 정사각형으로 나누어져 있는 M×N 크기의 보드를 찾았다. 어떤 정사각형은 검은색으로 칠해져 있고, 나머지는 흰색으로 칠해져 있다. 지민이는 이 보드를 잘라서 8×8 크기의 체스판으로 만들려고 한다. 체스판은 검은색과 흰색이 번갈아서 칠해져 있어야 한다. 구체적으로, 각 칸이 검은색과 흰색 중 하나로 색칠되어 있고, 변을 공유하는 두 개의 사각형은 다른 색으로 칠해져 있어야 한다. 따라서 이 정의를 따르면 체스판을 색칠하는 경우는 두 가지뿐이다. 하나는 맨 왼쪽 위 칸이 흰색인 경우, 하나는 검은색인 경우이다. 보드가 체스판처럼 칠해져 있다는 보장이 없어서, 지민이는 8×8 크기의 체스판으로 잘라낸 후에 몇 개의 정사각형을 다시 칠해야겠다고 생각..
2024.01.30