(Java) 프로그래머스 - 성격 유형 검사하기
·
코딩 테스트
카카오 레벨 1 문제가 새로 생겼길래 풀어보았다. 문제의 로직이 복잡하지는 않지만 구현에 시간이 좀 걸리겠다고 생각했다. 30분이면 풀 수 있을 것이라고 느꼈는데 한 시간이 걸렸다. 로직은 각 지표별 배열을 생성하고 List안에 Map을 만들어 초기화한 후 설문 결과에 맞게 Map의 value를 업데이트하는 것으로 생각했다. 설문 결과에 따라 유형별 점수 판별을 switch문을 사용하여 해결했다. switch문을 쓰지 않고도 가능할 것 같기도 한데 빨리 풀고 싶어서 그냥 사용했다. Map 사용에 꽤나 익숙해졌다고 생각했는데 아직 자유롭게 사용하지는 못하고 있는 것 같다. 다른 사람들 코드를 보면 내가 좀 복잡하게 푼 것 같다.... 최종 코드 import java.util.*; class Solution..
(Java) 프로그래머스 - 하노이의 탑
·
코딩 테스트
처음에 문제의 2번째 조건을 읽지않아서 스택으로 풀면 되겠다고 생각하여 풀었다. 그런데 테스트 케이스 이외에는 다 틀렸다... 만약 두번째 조건이 없었다면 간단한 문제였을것이다. 성공 코드는 재귀를 이용해서 풀었다. 코드 자체는 간단하지만 은근히 생각할게 많았던 문제였다. 2번째 조건이 있으므로 1번 기둥에서 3번 기둥으로 바로 이동하지 못한다. 2번 기둥을 경유해서 가야 하는데 2번 기둥으로 가기 위해서는 3번 기둥을 먼저 이용해야 한다. 그리고 2번 기둥에서 3번 기둥으로 이동할때 1번 기둥을 이용해야 한다. 실패 코드 import java.util.*; class Solution { public int[][] solution(int n) { List list = new ArrayList(); Sta..
(Java) 프로그래머스 - N-Queen
·
코딩 테스트
백트래킹을 사용해야 하는 유명한 문제이다. 어떻게 푸는지는 대강 알고 있었는데 실제로 풀어본 적이 없어서 풀어봤다. 2차원 배열 arr과 visited를 이용해서 문제를 풀어보려고 시도했는데 뭔가 코드만 복잡해지고 생각한 것처럼 구현이 되지 않았다. 1시간을 시도하다가 검색하니 2차원 배열을 1차원 배열로 압축해서 풀이가 있어 간단하게 풀었다. 2차원 배열을 이용해도 풀 수 있을 것 같은데 다시 풀어봐야겠다. 최종 코드 class Solution { static int[] arr; static int cnt; public int solution(int n) { int answer = 0; // 2차원 배열을 1차원으로 압축 -> 인덱스를 행, 값을 열로 보는것 arr = new int[n]; // Bac..
(Java) 프로그래머스 - 숫자 블록
·
코딩 테스트
간단한 문제처럼 보였지만 그렇게 쉽지는 않았다. 이중 for문으로 배열을 조작하면서 풀어보았는데 begin 값이 1일때는 정상적으로 답이 나오지만 1이 아닐경우에는 답이 정상적으로 나오지 않았다. 이런 저런 시도끝에 성공하지 못해서 검색을 통해 힌트를 얻었다. begin 부터 end 까지 각 블록이 먼저 소수인지 판별하여 소수라면 배열 idx에 1을 삽입하고 소수가 아니라면 가장 큰 약수를 삽입한다. 블록의 최대 개수가 10000000 이므로 약수가 10000000 이하 조건을 넣지 않으면 효율성 테스트에서 걸리게 된다. 실패 코드 class Solution { public int[] solution(long begin, long end) { int beginInt = (int) begin; int en..
(Java) 프로그래머스 - 배달
·
코딩 테스트
문제를 읽고 최단거리를 탐색하는 내용이기에 BFS로 해결할 수 있을줄 알았는데 많은 어려움을 겪었다. BFS 코드를 작성하다가 검색을 통해 힌트를 얻었고 다익스트라나 플로이드 와샬을 사용할 수 있다는 것을 알아서 모든 방법으로 풀어봤다. 다익스트라와 플로이드 와샬은 처음 배우는 알고리즘이여서 어려웠다. 이 문제는 하나의 정점에서 다른 정점들의 최단 거리임으로 다익스트라로 접근하는것이 가장 맞는것 같다. 다익스트라와 플로이드 와샬을 모른다면 잘 정리해놓은 다른분의 블로그를 첨부한다. [알고리즘/ 그래프] 다익스트라(Dijkstra) vs 플로이드 와샬(Floyd Warshall) (JAVA) 다익스트라(Dijkstra) vs 플로이드 와샬(Floyd Warshall) Dijkstra 알고리즘은 하나의 정점..
(Java) 백준 9934 - 완전 이진 트리
·
코딩 테스트
문제가 어려운 느낌은 아닌데 중간중간 막혔던 문제이다. 먼저 완전 이진 트리의 노드 개수는 2^k-1개 를 생각해야 하고 그리고 문제에서 입력값이 중위 순회이기 때문에 루트 노드가 매번 가운데에 있는 것을 알아야 한다. 이런 특징을 제대로 몰라서 막혔던 것 같다. 최종 코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; public class Main { static int k; static int[] arr; static List list; public static void main(..
(Java) 프로그래머스 - 멀리뛰기
·
코딩 테스트
레벨 2 치고는 너무 쉬운 문제였다. 이게 왜 레벨 2에 있는지 모를 정도로... 예전에 백준에서 비슷한 문제를 풀어봐서인지 문제를 보자마자 DP로 풀었다. 거리가 1일 때는 뛰는 방법이 1칸 이동 - 1가지 거리가 2일 때는 뛰는 방법이 (1칸 이동, 1칸 이동), (2칸 이동) - 2가지 거리가 3일 때는 뛰는 방법이 (1칸 이동, 1칸이동, 1칸 이동), (1칸이동, 2칸이동), (2칸이동 1칸이동) - 3가지 따라서 dp [i] = dp[i-1] + dp[i - 2]이라는 점화식이 바로 나온다. 오버플로우 때문에 dp [i]을 구할 때마다 1234567로 나눈 나머지를 해줘야 한다. n이 1인 경우 런타임 에러가 나서 따로 빼주었다. 최종 코드 class Solution { public long ..
(Java) 백준 5639 - 이진 검색 트리
·
코딩 테스트
많이 어려움을 겪었던 문제였다. 보통 다른 문제들은 입력값 N을 주어 몇 번 입력되는지 알려주는데 이 문제는 N이 없어서 고생을 많이 했다. while문으로 입력값이 없으면 멈추게 하려고 시도하고 IDE에서 디버깅을 했는데 잘 되지 않았다. 입력문을 처리하려고 한 시간을 넘게 시도했지만 계속 실패해서 결국 검색을 통해 다른 분들은 어떻게 풀었는지 참고했는데 나랑 똑같은 방법으로 풀었다........ 설마 IDE가 문제인가 싶어서 디버깅 없이 답안을 제출하니 맞았다. 트리를 연습하려고 문제를 풀었는데 입력값 처리만 고민해서 허무했다. 이 문제는 입력값으로 트리로 만들 수만 있다면 간단한 문제다. 트리를 만들 수 있다면 후위 순회 메서드는 금방 작성할 수 있기 때문이다. 다만 트리를 만드는 게 그렇게 쉽지는..
(Java) 프로그래머스 - 괄호 회전하기
·
코딩 테스트
예전에 풀었던 괄호 변환 문제와 비슷했지만 조금 더 복잡한 문제였다. 전체적인 문제 난이도는 쉬운 편이었던 것 같다. 제목이 괄호 회전이라 90도씩 돌리는줄 알았는데 왼쪽으로 한 칸씩 미는 문제였다. 문자열을 이동하는 메서드와 올바른 괄호인지 확인하는 메서드 2개로 로직을 짠뒤 한 번에 성공했다. 다만 코드가 쓸데없이 늘어나는것 같아서 풀면서도 마음이 불편했다. 그래서 괄호의 짝 세는 부분이 필요 없는 것 같아 지우고 리팩터링 했다. 실행 시간은 약간 더 빨리 지긴 했는데 거의 의미 없는 수준이다. 최초 코드 import java.util.LinkedList; import java.util.Queue; import java.util.Stack; class Solution { static int cnt; ..