알고리즘 7

3. Longest Substring Without Repeating Characters

반복되지 않는 가장 작은 단위의 문자열을 구하는 문제이다. 문자열 s가 주어지며 반환값으로 가장 짧은 문자열의 숫자를 반환하면 된다. 반복되지 않는 문자열이라 함은 이전에 나온 char가 등장하지 않는 것을 의미한다. 이전까지 등장한 문자를 저장해가며 새로 등장하는 문자가 이전에 등장한 적이 있는지 확인 해 주어야 한다. 문자열을 한번은 순회하여야 하기 때문에 N 이상의 복잡도를 가진다. 중복되지 않는 단일 타입의 요소들을 계속해야 비교해야 하기에 hashSet을 사용한다. hashSet의 contains, input은 각각 logN의 복잡도를 가진다. contains는 get과 동일한 복잡도를 가진다. public boolean containsKey(Object key) { return getNode(..

알고리즘 2022.12.29

백준 1012 유기농 배추

https://www.acmicpc.net/problem/1012 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net 2차원 배열형태의 값이 주어지며 인접한 배열들을 재귀적으로 이동하며 문제를 해결해야 한다. import java.io.BufferedReader import java.io.InputStreamReader class FarmAndBug { private lateinit var farmArray: Array private var cabbageCount: Int = 0 private var bugCount: Int..

알고리즘 2022.11.09

N으로 표현 kotlin

https://programmers.co.kr/learn/courses/30/lessons/42895 코딩테스트 연습 - N으로 표현 programmers.co.kr 문제 설명 아래와 같이 5와 사칙연산만으로 12를 표현할 수 있습니다. 12 = 5 + 5 + (5 / 5) + (5 / 5) 12 = 55 / 5 + 5 / 5 12 = (55 + 5) / 5 5를 사용한 횟수는 각각 6,5,4 입니다. 그리고 이중 가장 작은 경우는 4입니다. 이처럼 숫자 N과 number가 주어질 때, N과 사칙연산만 사용해서 표현 할 수 있는 방법 중 N 사용횟수의 최솟값을 return 하도록 solution 함수를 작성하세요. N으로 주어진 수를 표현하는 문제이다. 해결방법 : 8개를 써서 만들 수 있는 모든 경우의..

알고리즘 2021.07.31

위장

위장 https://programmers.co.kr/learn/courses/30/lessons/42578 코딩테스트 연습 - 위장 programmers.co.kr ## 문제 설명 [Value,Key] 형태의 배열이 주어진다. 조건에 맞추어 모든 경우의 수 를 구한다. ### 문제 풀이 문제의 답은 위장할 수 있는 모든 경우의 수를 열거하는 것이 아닌 모든 경우의 수만을 출력한다. 따라서 Key,Value는 를 지정하며 Hash 타입으로 생성한다. 모든 경우의 수는 모든 가짓수를 곱하는 것 이다. 단, "해당문제의 조건 중 반드시 하나의 옷은 입어야 한다" 와 "어떤 종류의 옷은 입을 수 있지 않아도 된다." 2가지를 고려 해 주어야 한다. 1. 옷을 입지 않을 수 있으니 가짓수 + 1(입지 않는 경우의..

알고리즘 2021.07.17

1874번 스택 수열

https://www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 스택을 통하여 해당 수열을 만들 수 있는지 묻는다. 만들 수 있다면 해당 수열을 만들어가는 스택연산 과정을 출력하며 만들 수 없다면 No를 출력한다. 접근 1 1. 기준이 되는 숫자는 1부터 차례대로 증가한다. 2. 스택 연산의 과정을 출력해야 하기에 해당 연산을 실제로 따라갈 필요가 있다. 접근 2 1. 스택 연산..

알고리즘 2020.02.22

구명보트

문제 설명 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 50kg]이고 구명보트의 무게 제한이 100kg이라면 2번째 사람과 4번째 사람은 같이 탈 수 있지만 1번째 사람과 3번째 사람의 무게의 합은 150kg이므로 구명보트의 무게 제한을 초과하여 같이 탈 수 없습니다. 구명보트를 최대한 적게 사용하여 모든 사람을 구출하려고 합니다. 사람들의 몸무게를 담은 배열 people과 구명보트의 무게 제한 limit가 매개변수로 주어질 때, 모든 사람을 구출하기 위해 필요한 구명보트 개수의 최솟값을 return 하도록 solution 함수를 작성해주세요..

알고리즘 2019.11.19

종이접기

문제 설명 직사각형 종이를 n번 접으려고 합니다. 이때, 항상 오른쪽 절반을 왼쪽으로 접어 나갑니다. 다음은 n = 2인 경우의 예시입니다. 먼저 오른쪽 절반을 왼쪽으로 접습니다. 다시 오른쪽 절반을 왼쪽으로 접습니다. 종이를 모두 접은 후에는 종이를 전부 펼칩니다. 종이를 펼칠 때는 종이를 접은 방법의 역순으로 펼쳐서 처음 놓여있던 때와 같은 상태가 되도록 합니다. 위와 같이 두 번 접은 후 종이를 펼치면 아래 그림과 같이 종이에 접은 흔적이 생기게 됩니다. 위 그림에서 ∨ 모양이 생긴 부분은 점선(0)으로, ∧ 모양이 생긴 부분은 실선(1)으로 표시했습니다. 종이를 접은 횟수 n이 매개변수로 주어질 때, 종이를 절반씩 n번 접은 후 모두 펼쳤을 때 생기는 접힌 부분의 모양을 배열에 담아 return ..

알고리즘 2019.11.19