알고리즘/프로그래머스
-
프로그래머스 Lv.2) 다음 큰 숫자알고리즘/프로그래머스 2020. 5. 19. 22:30
다음 큰 숫자 코딩테스트 연습 - 다음 큰 숫자 자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니 programmers.co.kr 풀이 Lv2 문제를 풀고 있는 이유는 내 생각보다 생각을 많이 해야하는 문제가 존재하고, 기본을 다시 한 번 되돌아보기 좋기 때문이다. 또한, IDE를 사용하지 않고 문제를 푸는 연습을 하고있어서, 코드가 많이 길어지지 않는 문제들로 먼저 연습하고 있기 때문이다. 아무튼 이 문제를 처음 마주했을 때는 '이건 검색을 해야 알 수 있는 문제다' 였다. 물론 코드를 검색하고 이런 것이 아니라 JAVA에서 숫자를 2진수로 ..
-
프로그래머스 Lv.2) 124 나라의 숫자알고리즘/프로그래머스 2020. 5. 16. 17:30
124 나라의 숫자 코딩테스트 연습 - 124 나라의 숫자 124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다. 124 나라에는 자연수만 존재합니다. 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다. programmers.co.kr 풀이 이 문제도 고민의 시간이 길었다. 문제 자체는 이해하기 쉬웠다. 모든 10진법 숫자는 1,2,4 세 개를 통해 표현해야하는 문제이고 3진법과 비슷한 느낌이라고 생각했다. 다만 다른 점?은 세가지 숫자만 이용하는데 1,2,3이 아닌 1,2,4라는 것이다.. ㅎㅎ 조금 특이하게 이 문제는 로직 자체는 쉽게 떠올랐으나, 구현이 오래걸렸다. (멀쩡한 사각형과 이 문제는 어제 푼 문젠데, 어제 컨디션이 별로였..
-
프로그래머스 Lv.2) 멀쩡한 사각형알고리즘/프로그래머스 2020. 5. 16. 17:06
멀쩡한 사각형 코딩테스트 연습 - 멀쩡한 사각형 가로 길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있습니다. 종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있으며, 모든 격자칸은 1cm x 1cm 크기입니다. 이 종이를 격자 선을 �� programmers.co.kr 풀이 평소에 레벨 3,4 혹은 카카오 문제를 풀어왔기에 레벨 2는 쉽다고 생각하며 접근했다가 큰코다쳤다. 너무너무 어려웠고 푸는데 오랜 시간이 걸렸다. 먼저, 처음에 생각했던 로직은 직선이 타일과 정수 좌표에서 만나는 구간을 구해 반복되는 만큼 수를 빼주는 것이었다. 그래서 Linear Equation(1차 방정식)을 세우고 해당 직선과의 거리를 구하면서 진행했다. 정수인 x,y 점을 돌면서 루트 2(sqrt 2)보..
-
프로그래머스 Lv.2) 스킬트리알고리즘/프로그래머스 2020. 5. 16. 16:42
스킬트리 코딩테스트 연습 - 스킬트리 programmers.co.kr 풀이 (2020.05.16) 스킬을 찍어야하는 순서를 ArrayList에 char로 담아주었다. 또한, char를 담으면서 해당 스킬이 ArrayList에 부여된 인덱스 넘버를 HashMap을 통해 저장해주었다. 이후, 스킬 트리 배열을 돌면서 String값을 검증했다. 우선 모든 스킬이 가능하다는 가정을 두고 스킬트리 배열의 길이 만큼 return할 결과에 담아주었다. String을 돌 때마다 해당 SkillTree를 위한 ArrayList에 스킬을 저장하면서 확인했다. String의 index마다 그 스킬이 찍어야하는 스킬 ArrayList에 담겨있는지 먼저 확인하고, 배워야하는 스킬이면 이 스킬 이전에 배워야하는 스킬을 배웠는지 ..
-
프로그래머스 Lv.4) 3xn 타일링알고리즘/프로그래머스 2020. 5. 14. 23:45
3xn 타일링 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 타일링 시리즈 문제로 DP 문제이다. 하지만, 점화식 세우는데 애를 먹었다. 우선, 홀수의 경우 타일을 채울 수 없다는 것과 dp[n] = dp[n-2]*3 부분까지는 쉽게 세울 수 있었다. n이 2씩 증가할 때마다 새롭게 생기는 3x2의 직사각형 부분을 채우는 경우의 수가 3가지기 때문에 이 전보다 3배의 경우의 수가 더 생긴다. 이해하기 힘들었던 부분은 n이 4마다 새롭게 생기는 2가지 경우의 수였다. n이 4 증가할 때마다 생기는 이 부분 때문에 많은 고민을 하게했고, 다른 분들이 포..
-
프로그래머스 Lv.3) 2xn 타일링알고리즘/프로그래머스 2020. 5. 14. 23:28
2 x n 타일링 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 코드 1 이 문제도 풀었었는데..?? 하는 생각이 들었다. 나중에 알고보니 백준에 타일링 시리즈가 많다는 것을 들었다. dfs의 로직을 dp로 옮기는 문제 중 가장 기본인 문제라고 생각한다. 이 문제는 피보나치 수열을 이용하는 문제로 무리없이 풀 수 있었다. 2020.06.03) 코드 2 얼마 전, 멀리뛰기 문제를 풀면서, 피보나치를 배열이 아닌 세 변수를 이용해 푼 기억이 났다. 그래서 이 문제에서도 배열이 아닌, 변수 세 개를 이용해 풀면서 완벽히 숙지했나 확인하려고 다시 풀었다. ..
-
프로그래머스 Lv.4) 지형 이동알고리즘/프로그래머스 2020. 5. 14. 23:23
지형이동 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 언젠가 풀었던 문제인 것 같기도 하고.. 아닌 것 같기도 하다. 아무튼 처음에 생각한 것은 for문을 돌면서 dp로 최소 값을 누적해가는? 로직으로 풀었는데 많이 틀린 것을 보고 이 로직은 풀 수 없다고 판단했다. MST에 약하다고 생각해서 최대한 기피하려고 했지만, 검색이나 다시 생각해봐도 MST를 통해 풀어야겠다는 생각이 들었다. 1. 사다리 없이 이동할 수 있는 섹터를 Grouping 해준다. 2. 각 구역에서 다른 구역으로 이동하는 경우에 두 그룹의 넘버와 사다리의 비용을 우선순위 큐에 ..
-
프로그래머스 Lv.3) 종이접기알고리즘/프로그래머스 2020. 5. 14. 00:35
종이접기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 (코드 1, 코드 2) 문제를 보자마자 점화식이 필요한 문제라고 생각했다. 그래서 처음 생각한 점화식은 n => n-1까지의 결과를 두 번 반복하고 끝에 1이 들어간다고 생각했다. 주어진 테스트 케이스만 봤을 때는 답이 나오기는 했다. 하지만 제출 결과는 0점이었다. 점화식이 틀렸다는 것을 알아차리고 새로운 점화식을 세우려했다. 하지만 어제 과음.. 다른 분의 점화식을 참고하니까 2^(n-1)을 기준으로 대칭되는 인덱스는 서로 다른 값을 가지고 있다는 식을 보았다. 물론 기준점(2^(n-1)) ..