목록Algorithm/프로그래머스 (12)
olrlobt
🔒 2단계 - k진수에서 소수 개수 구하기 📌 테스트케이스 추가 힌트 1번, 11번에서 런타임 에러가 난다면, Parameters n 1000000 k 2 Return X n값에 최대값을 넣어 값이 잘 나오는 지 확인해 보고, 숫자가 넘어가는 과정을 생각해본다. ✍️ 풀이법 해당 문제에서 [211,2,11을 k진법으로 보았을 때가 아닌, 10진법으로 보았을 때] 라는 문구는 10진법으로 변환하라는 것이 아니라는 것에 주의한다. 1. 주어진 n을 k진법으로 변환한다. 변환을 할때, n을 k로 나눈 나머지를 이어 붙여서, 뒤집어 주어야 k진법으로 완벽히 변환 된다. 2. k진법으로 변환한 수를 0으로 split한다. 3. split 한 문자열을 10진법으로 보았을때, 소수인지 판별한다. (2진법 11을 10..
🔒 2단계 - n^2배열 자르기 입출력 예시 📌 테스트케이스 추가 힌트 해당 문제는 gif 설명이 잘 되어 있어, 추가 테스트 케이스가 필요하지 않았다. ❌ 풀이법 #메모리 초과 실패 해당 문제는 알고리즘을 생각 할 필요 없이, 애니메이션으로 잘 보여주고 있기 때문에 입출력 예시를 그대로 코드로 옮겼다. 하지만, 공간복잡도와 시간 복잡도를 생각하지 않는 방법이기 때문에 메모리 초과 실패와 시간초과 실패를 겪었다. ❌ 풀이 #메모리 초과 실패 import java.util.*; class Solution { public int[] solution(int n, long left, long right) { int[] answer = new int[(int)(right-left+1)]; List rows = n..
🔒 2단계 - 괄호 회전하기 📌 테스트케이스 추가 힌트 해당 문제는 추가 테스트케이스가 필요하지 않았다. ✍️ 풀이법 나는 이 문제를 보자마자, 스택으로 해결해야 하는 문제라고 생각했다. 문제를 이해하는 것 자체는 최단시간이 걸렸지만, 문제를 해결함에 있어서 생각해야 할 것들이 있었다. - 생각 해야 할 것 1. 열리는 괄호와 닫히는 괄호를 어떻게 매치하여 줄 것인가. 해당 문제에서 무턱대고 열리는 괄호 '(' 가 닫히는 괄호 ')'를 만난다는 if문을 사용하게 되면, 문제는 당연히 해결이 가능하지만 코드 자체는 매우 더러워 질 것이다. 2. 문자열 s를 돌리는 방법 단순히 substring을 사용하여 쪼갠다면, 문제 해결은 가능하지만 객체 생성을 많이 반복하게 되어, 좋지 ..
🔒 2단계 - 캐시 🤔 문제 이해 해당 문제는 CACHE와 LRU(Least Recently Used)에 관한 이해가 필요했다. 흔히 아는 CACHE. 내가 이미 방문한 홈페이지를 재방문한다면 처음 이 페이지를 방문했을때보다, 일찍 로드 된 것을 느껴본 적이 있을 것이다. 이것이 CACHE가 페이지가 저장되어 있기 때문. LRU는 캐시에 대한 알고리즘으로, CACHE가 꽉 찼을때, 가장 오래된 CACHE를 제거하는 기법이다. 이 문제에서는 CACHE HIT 과 CACHE MISS만 파악하면 된다. 아래 그림에서 HIT이라 쓰여진 부분이 HIT, 글씨가 없는 부붙이 MISS 이다. 간단히, 이미 캐시에 저장되어 있는 자료라면, HIT을 발생시킨다. 예로, 그림 3번째 줄 부분을 보면, 이 전 CACHE [..
🔒 2단계 - 위장 📌 테스트케이스 추가 힌트 Parameters [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"],["red_hat", "headgear"],["red_sunglasses", "eyewear"],["red_top", "top"]] Return 23 Parameters [["yellow_hat", "headgear"], ["blue_sunglasses", "eyewear"], ["green_turban", "headgear"],["red_top", "top"],["blue_jean", "bottom"]] Return 23 ✍️ 풀이법 해당 문제의 경우 알고리즘을 생각해 내는 시간..
🔒 2단계 - 이진 변환 반복하기 📌 테스트케이스 추가 힌트 해당 문제는 추가 테스트케이스가 필요하지 않았다. ✍️ 풀이법 먼저 문제 풀이 법을 생각해 보면, 다음과 같다. 1. 문자열 S에서 0을 제거한다 2. 1만 남은 문자열의 길이를 구한다 3. 길이를 2진수로 변환한다 4. 변환한 수를 문자열 S에 넣는다 5. 1~4를 문자열 S가 1이 될때까지 반복한다 answer = [반복한 횟수, 0을 지운 횟수] int 타입을 2진수 문자열로 리턴하는 toBinaryString을 사용하여 문제를 해결하였는데, 아주 간단하게 풀었다고 생각한다. 🗝️ 풀이 class Solution { public int[] solution(String s) { int[] answer = {0,0}; int leng = 0;..
🔒 2단계 - 올바른 괄호 📌 테스트케이스 추가 힌트 이 문제는 추가 테스트케이스가 필요하지 않았다. ✍️ 풀이법 이 문제는 스택을 사용하면서 풀 수 있고, 스택을 사용하지 않고 풀 수 있다고 생각한다. 여기서 나는 스택 사용법을 조금 더 숙지 해 본다는 생각으로 스택을 사용하여 코딩하였다. 생각하는 방식은 1. 스택에 한글자씩 넣는다. 2. 글자를 넣기 전에 빈 스택이 아니라면 꺼내서 확인해본다. 의 방법으로 접근하였고, 해당 방식으로 조건문을 작성하였다.🗝️ 풀이 import java.util.Stack; class Solution { boolean solution(String s) { boolean answer = true; Stack stack = new Stack(); for(int i=0; i
🔒 2단계 - 점프와 순간 이동 📌 테스트케이스 추가 힌트 해당 문제는 추가 테스트케이스가 필요하지 않았다. ✍️ 풀이법 해당 문제는 처음 1칸은 무조건 점프해야하고, 무한대로 순간이동을 할 수 있지만, 도착 지점을 넘어버리면 안 되기 때문에 순간이동 사이사이 점프를 배치해 주어 최솟값을 맞추어야 했다. 해당 문제를 해결하기에 앞서, 테스트케이스 5000이 어떻게 5가 되는지 생각해 보았다. 단순히 1칸 앞으로 가서 2를 곱해 나가면 2 > ... > 1024 > 2048 > 4096 으로 남은 900칸을 점프해야 했다. 다음으로는 5000이니까, 단순히 5까지 점프, 또 순간이동 해 보았다. 5 > ... > 2560 > 5120 으로 초과 해버렸다. 다른 방법이 필요했다. 어떻게 5000이 5번 만에..