아직 level2도 한참 남았지만 슬슬 본격적인 취직 준비에 들어가야 하므로 level3에 진입하기로 하였다. 처음으로 잡은 문제는 역시 level3의 가장 첫번째 문제(작성일 기준으로 1문제가 추가되었는지 2번째 문제로 밀렸다.)인 종이접기이다. 역시 입출력 예시부터 보고 시작하겠다. 입력에 나와있는 n은 '몇 번을 접었는가'에 대한 입력이다. 종이는 무조건 '오른쪽에서 왼쪽'으로 '절반 씩' 접을 수 있다. 절반을 접고 그것을 펼쳐보면 접힌 자국은 'v'자 형태를 하고있다. 이번엔 종이를 2번 접어보자. 접는 방법은 위와 마찬가지로 오른쪽에서 왼쪽으로 절반을 접는다. 이제 그것을 펼쳐보자. 그러면 접힌 자국이 'vv∧'로 굴곡이 생겨있을 것이다. 1은 'v', 2는 'vv∧'이다. 출력은 [0], [..
알고리즘 검색 결과
역시나 입출력 예시부터 보고 시작하겠다. 설명을 시작하기 전에 알파벳 순서를 보고 가도록 하겠다. 알파벳 순서는 다음과 같다. ABCDEFGHIJKLMNOPQRSTUVWXYZ 이 문제는 조이스틱의 상하좌우를 이용해 이름을 넣는 것이 목표다. 입력으로 name이라는 string형을 받는데, 가상의 이름은 임시로 name의 길이만큼 A로 초기화가 되어있다. 입출력 예의 첫번째 것을 예시로 보면 "AAAAAA"이 들어가 있는 상태라고 보면 된다. 그것을 상하좌우로 움직여 해당 name의 이름을 만드는 것이다. 상은 A -> B로 이동하는 정방향이고, 하는 A -> Z로 이동하는 역방향이다. 좌는 커서가 한번 좌측으로 이동하고, 우는 커서가 한번 우측으로 이동한다. 이런 조건으로 움직였을 때 최소 몇 번을 움직..
이번에도 역시 입출력 예시를 보고 시작하도록 하겠다. 더 맵게는 scoville이라는 맵기와 K라는 원하는 최소 맵기가 존재한다. 위의 예시에서 보면 [1, 2, 3, 9, 10, 12]라는 맵기가 존재하고 K라는 최소 희망 맵기가 입력된 것이다. 하지만 [1, 2, 3]이라는 맵기는 7보다 작다. 그러니 이걸 잘 조합해서 7이상을 만들어줘야 한다. 물론 조합법은 해당 문제에 자세히 기술되어 있다. 이 공식을 위의 입력받은 것에 대입해보면 (가장 맵지 않은 음식)1 + (두 번쨰) (2 * 2) = 5가 된다. 첫 번째 계산 이후에는 당연하게도 [5, 3, 9, 10, 12]가 되어있다. 이런식으로 계산해서 모든 맵기가 최소 희망 맵기가 될때까지 총 몇번의 계산이 이뤄져야 하는지를 알아내면 된다. 위 입..
이번에도 머넞 입출력 예시를 보면서 시작하도록 하겠다. 이위 예시의 입력은 두개로 string형의 number와 int형의 k이다. number는 안에 들어가는 숫자를, k는 '빠질' 숫자를 의미한다. 그러면 이렇게 생각할 수도 있을 것이다. "1231234"에서 3개의 숫자를 빼면 "4322"가 가장 큰수가 아니냐 하는 생각을 말이다. 하지만 숫자를 뺄때도 조건이 있다. 기존에 들어온 순서는 지켜져야 한다는 것이다. 즉, 두 번째 것으로 예시를 들면 4는 number의 가장 끝이므로 절대 일의 자리에서 벗어날 수 없다는 말이다. 10의 자리에 있는 3또한 답에 1 혹은 10의 자리는 갈 수 있어도 100, 1000의 자리는 갈 수 있다. 이렇게 순서를 지키면서 k의 변수만큼 숫자를 뺐을 때 가장 큰 수..
프로그래머스를 level2를 순서대로 풀고 있는데 완료 인원이 적은 구간대에 들어섰다. 덕분에 문제를 푸는데 시간이 조금 걸리고 있고, 앞으로도 글을 올리는 주기가 꽤 길어지지 않을까 생각이 든다. 사설은 이쯤에서 접어두고 문제에 대해 설명부터 시작하겠다. 설명은 저렇지만 솔직히 이것만 보면 이해하는데 1시간 이상 소요될 것이다. (나는 결국 이해 못해서 주변 사람들에게 물어봤다.) 이 문제는 저렇게 보는 것이 아니라 [1, 1, 1, 0] [1, 2, 2, 0] [1, 0, 0, 1] [0, 0, 0, 1] [0, 0, 0, 3] [0, 0, 0, 3] 이렇게 봐야 보인다. 예제에 대한 설명을 간출이면 (0, 0)에서 시작된 1은 아래로 두칸 우로 두간 이어져 있다. (2, 3)은 (0, 0)에서 시작..
전에 올렸던 것에서 무려 9일이 흘렀다. 그 9일동안 한가지 문제에만 매달려 있었다. 나에게 고난과 시련을 안겨준 문자열 압축에 대해 살펴보겠다. 문자열 압축은 말 그대로 문자열을 압축하는 것이다. 가장 처음 보이는 "aabbaccc"를 보면 같은 알파벳들이 보일 것이다. 쉽게 설명하면 '같은 패턴을 압축'하는 것이 이번 문제이다. "aabbaccc"는 차례대로 1로 압축을 한다면 가장 먼저 '뭉쳐있는' a가 2개 있다. 그러니 'a2'가 만들어진다. b 또한 마찬가지이다. 'b2'가 만들어진다. 다음으로 있는 a는 1개만 있다. 1은 생략 가능하니 'a'가 만들어진다. 그 다은 c는 3개가 뭉쳐있다. 그렇다. 'c3'이다. 이것을들 합치면 'a2b2ac3'이 만들어진다. 8개 짜리 문자열이 7개가 되었..
최근댓글