(Java) 프로그래머스 - 연속 부분 수열 합의 개수
·
코딩 테스트
처음에는 단순히 슬라이딩 윈도우를 사용해서 풀려고 시도했다. 그러나 부분 수열의 크기가 고정되어 있지 않아서 풀이에 많은 시간이 걸렸다. 최종 코드 import java.util.*; class Solution { public int solution(int[] elements) { int answer = 0; // 부분 수열 크기 int size = 1; Set set = new HashSet(); // 부분 수열 크기가 elements 길이가 될때까지 반복 while (size
(Java) 프로그래머스 - 공원 산책
·
코딩 테스트
추가된 1단계 문제중 가장 정답률이 낮은 문제였다. 전형적인 그래프 탐색 문제였는데, 한칸씩 이동하며 조건을 검사해야 했지만 한번에 n칸씩 이동한다는걸 뒤늦게 깨닫고 수정하느라 풀이 시간이 많이 늘어났다. 최종 코드 import java.util.*; class Solution { static int startX; static int startY; public int[] solution(String[] park, String[] routes) { int[] answer = new int[2]; // 동서남북 이동할 좌표 map에 삽입 Map map = new HashMap(); map.put("N", new int[]{-1, 0}); map.put("E", new int[]{0, 1}); map.put(..
(Java) 프로그래머스 - 개인정보 수집 유효기간
·
코딩 테스트
카카오 문제치고 쉬운 문제였다. 인풋 값도 적어서 시간 초과를 생각하지 않고 편한 마음으로 풀었다. Date와 SimpleDateFormat를 이용해서 계산하는 방법도 생각했지만 그냥 계산하는게 더 간단해 보여서 사용하지는 않았다. 로직 먼저 terms 배열을 순회하며 map에 약관종류와 유효기간을 넣어준다. 그리고 privacies를 순회하며 약관 종류에 맞는 유효기간을 가져와 cal 메서드를 호출한다. 유효기간이 1이 될 때까지 날짜를 계산하여 년월일을 일자로 바꾸어 현재 날짜와 비교한다. cal 메서드의 반환값이 false이면 list에 추가하고 모든 순회가 끝나면 stream을 이용해 배열로 변환한다. 최종 코드 import java.util.*; class Solution { public int..
(Java) 백준 15652 - N과 M (4)
·
코딩 테스트
문제 분류가 백트래킹으로 되어 있지만 그냥 재귀를 생각하면서 풀었다. 재귀 탈출문이 실행되고 리턴되면 idx++로 증가시켜 조건에 맞게 문자열을 만들었는데 이걸 백트래킹이라고 볼 수 있는지는 잘 모르겠다... 로직 스트림을 사용하기 위해서 입력을 int 배열을 이용해서 받았는데 , 사실 n, m 변수 하나씩 만들어서 받는 게 편할 수도 있다. n과 m을 받았다면 재귀 함수를 호출해서 문자열 조합을 만든다. 재귀 호출마다 depth를 증가시키고 depth가 m과 같으면 substring을 사용해서 문자열 앞 공백을 제거하고 문자열을 stringBuilder에 추가하고 리턴한다. 문제 조건에 맞추기 위해서 리턴후에는 idx를 증가시키고 모든 조합이 나올 때까지 재귀 호출을 반복하면 된다. 최종 코드 impo..
(Java) 프로그래머스 - 둘만의 암호
·
코딩 테스트
문제 해결 로직은 쉬웠지만 깔끔하게 풀지는 못한 것 같다. 스트림을 이용하면 조금 더 보기 좋게 코드를 작성할 수 있을 것 같은데 아직 스트림이 익숙하지 않다.. 로직 제시된 String을 char 배열로 바꾸고 contains() 메서드를 이용하기 위해 skipArr을 list에 넣어준다. arr 배열을 순회하며 문자를 다음 문자로 바꾸어 'z' 이후 문자인지 확인하여 이후 문자라면 'a'로 바꿔준다. 그리고 list에 넘어가야할 문자가 있는지 확인한다. 바꾼 문자가 list에 있다면 cnt를 증가시키지 않고 넘어가고, 없다면 cnt를 증가시켜 cnt가 index와 같아질 때까지 문자를 바꾼다. 마지막으로 바꾼 문자를 StringBuilder에 추가하면 된다. 최종 코드 import java.util...
(Java) 프로그래머스 - 카드 뭉치
·
코딩 테스트
마스터즈 코스를 진행하며 CS 공부하기에도 시간이 너무 부족하지만 하루에 한 문제씩 알고리즘 문제 풀기를 다시 시작하려고 한다. 요즘 프로그래머스에 문제들이 많이 추가되고 있다. 예전에 프로그래머스 2단계 문제까지 전부 다 풀었었는데 추가된 문제가 많아서 전부 다 풀어보고 3단계로 가야겠다! 로직 사실 문제가 너무 간단해서 로직을 크게 생각하지 않았다. goal 배열을 순회하면서 cards1 배열과 cards2 배열을 동시에 탐색하면 된다. 각 cards 배열의 인덱스를 만들고 배열의 크기를 벗어나지 않으면서 goal 문자와 같으면 인덱스를 추가하고 다음 문자로 넘어간다. 만약 어떤 cards 배열의 어떤 문자도 일치하지 않으면 바로 No를 리턴해서 탐색을 종료한다. 모든 탐색이 종료되면 문자열을 만들 ..
(Java) 프로그래머스 - 베스트앨범
·
코딩 테스트
한번에 로직이 세워지지 않았던 문제이다. HashMap에 익숙해졌다고 생각했지만 values를 기준으로 내림차순 정렬하는데 어려움을 겪었다. 로직 먼저 genres와 play값을 HashMap에 넣어 각 장르별 플레이 횟수를 센다. 그리고 keySet을 리스트에 넣어 플레이 횟수별로 내림차순 정렬한다. 정렬된 list의 값을 순회하면서 첫번째와 두번째로 많이 재생된 노래의 인덱스를 result 리스트에 넣고 마지막으로 배열로 복사해서 반환하면 된다. 최종 코드 import java.util.*; class Solution { public int[] solution(String[] genres, int[] plays) { List result = new ArrayList(); // 각 장르별로 HashMa..
(Java) 프로그래머스 - 단속카메라
·
코딩 테스트
오랜만에 문제를 읽고 어떻게 풀어야 하는지 감이 오지 않았다. 문제 유형이 그리디로 분류되어 있었지만, 로직 자체가 생각나지 않았다. 결국 고민하다가 검색을 통해서 힌트를 얻었다. 로직 이 문제의 키포인트는 정렬이다. 각 자동차의 진출 시간인 routes [i][1] 값을 기준으로 정렬하면 문제를 쉽게 해결할 수 있다. 왜냐하면 n번째 자동차의 진출시간과 n+1 자동차의 진입시간을 비교해 n+1번째 자동차의 진입시간이 n번째 자동차의 진출 시간 이전이라면 카메라의 숫자를 늘릴필요가 없어 다음 차량으로 넘어가면 되고, n+1번째 자동차의 진입시간이 n번째 자동차의 진출 시간 이후라면 min의 값을 바꾸고 카메라의 숫자를 +1 하면 되기 때문이다. 최종 코드 import java.util.*; class S..
(Java) 프로그래머스 - 등굣길
·
코딩 테스트
문제를 읽고 DFS / BFS로도 풀 수 있겠다는 생각을 했다. 그런데 문제 유형이 DP로 분류되어 있어서 시간 초과가 나지 않을까 싶어서 DP로 풀수 있는 방법을 생각해서 해결했다. 로직 먼저 m x n인 arr 배열을 만들고 웅덩이를 -1로 초기화한다. 그리고 첫 번째 행과 열이 아니면 이전 행과 열의 값을 더하며 탐색을 진행한다. 최종적으로 마지막 행과 열에는 도달할 수 있는 방법의 개수가 값으로 들어있게 된다. 최종 코드 class Solution { public int solution(int m, int n, int[][] puddles) { int answer = 0; // n x m 배열 초기화 int[][] arr = new int[n][m]; // 시작점은 1 arr[0][0] = 1; ..