본문 바로가기

프로그래머스19

프로그래머스 lv2 - 스킬트리 문제프로그래머스 lv2 - 스킬 트리풀이선행 스킬의 맨 처음 스킬부터 유저가 만든 스킬트리와 비교현재 체크해야 할 선행 스킬과 유저 스킬트리에서 체크해야 할 스킬이 같으면 다음 선행 스킬로 idx 증가선행 스킬에 있는 스킬이 유저 스킬 트리에 있는 경우 cnt 증가최종적으로 스킬 트리 끝까지 비교 후 idx와 cnt가 같으면 선행 스킬 순서대로 있다고 판단하여 answer 증가코드import java.util.*;class Solution { public int solution(String skill, String[] skill_trees) { int answer = 0; ArrayList s = new ArrayList(); // skill for (char .. 2024. 6. 23.
프로그래머스 lv2 - 다리를 지나는 트럭 (자바) 문제프로그래머스 lv2 - 다리를 지나는 트럭풀이큐 활용큐를 다리로 생각하고 트럭을 넣고 빼면서 진행큐의 처음 상태를 다리 길이만큼 0을 넣고 시작해야 함 -> 큐에 있는 트럭을 맨 앞으로 이동시키기 위함현재 트럭을 태울 때까지 반복문을 돌리면서 상태를 갱신함어려웠던 점2번째 풀이 시도 끝에 풀었던 문제이다.순차적으로 넣고 빼는 걸 구현하는게 생각보다 조건들을 다 해결하기가 까다로웠다.코드import java.util.*;class Solution { public int solution(int bridge_length, int weight, int[] truck_weights) { int time = 0; Queue q = new LinkedList(); // 다리 .. 2024. 6. 23.
프로그래머스 lv2 - 두 큐 합 같게 만들기 (자바) [2022 KAKAO TECH INTERNSHIP] 문제프로그래머스 lv2 - 두 큐 합 같게 만들기풀이두 가지 풀이법 존재 : 투 포인터, 그리디투포인터큐1과 큐2를 붙여서 하나의 1차원 배열로 만든다.큐1에서 팝, 인서트 작업을 하는 것 → 큐 1의 맨 앞을 큐2의 맨 뒤로 붙임큐2에서 팝, 인서트 작업을 하는 것 → 큐 2의 맨 앞을 큐1의 맨 뒤로 붙임이런 구조기 때문에 두 큐를 합쳐서 1차원 배열로 만들고 투포인터로 접근한다.mid = (큐1의 합 + 큐2의 합) / 2큐1의 맨 앞과 큐2의 맨 뒤를 st, end 포인터로 잡고 투포인터 알고리즘을 진행한다.st ~ end의 원소의 합 st ~ end의 원소의 합 > mid 인 경우 합에서 st 위치를 빼주고 st++st ~ end의 원소의 합 = mid인 경우 종료-> 제일 먼저 찾는 경우가 가.. 2024. 6. 23.
프로그래머스 lv2 - 구명보트 (자바) 문제프로그래머스 lv2 - 구명보트풀이내 풀이정합성 테스트는 다 통과했지만 효율성 테스트를 전부 시간 초과로 실패했다.import java.util.*;class Solution { public int solution(int[] people, int limit) { int answer = 0; Arrays.sort(people); for (int i = 0; i mx) { mx = w + people[j]; idx = j; } } people[idx] = 0; answer++; } r.. 2024. 6. 22.
프로그래머스 lv2 - 요격 시스템 (자바) 문제프로그래머스 lv2 - 요격 시스템풀이그리디 문제미사일들의 범위가 들어 있는 배열을 미사일의 끝 지점을 기준으로 오름차순 정렬한다.요격 시스템의 시작 값을 0으로 하고 전체 미사일들을 확인하며 요격 시스템의 위치를 업데이트한다.요격 시스템의 위치 요격 시스템의 위치 > 미사일의 시작 위치 : 그냥 넘어감어려웠던 점그리디적인 사고를 하는게 스스로 부족하다고 느낀다. 범위가 있는 데이터들이 모여 있는 경우 떠올려야 할 접근 방법전체를 어떤 식으로 정렬해야 할까? (시작 위치? or 끝 위치? 어느 방식으로 정렬할까?)전체를 어느 값과 비교해가며 값을 업데이트 해야 할까?어떤 방식으로 업데이트 조건을 처리해야 할까?코드import java.util.*;class Solution { public in.. 2024. 6. 22.
프로그래머스 lv2 - 행렬 테두리 회전하기 (자바) 문제프로그래머스 lv2 - 행렬 테두리 회전하기풀이구현 문제내 풀이회전시켜야 할 위치(y,x)와 회전시키기 전 그 위치의 값을 순서대로 리스트에 저장저장한 리스트에 있는 값을 새로운 배열에 한 칸 씩 오른쪽으로 밀어서 저장한 칸 씩 밀어서 만든 배열의 값을 회전시키야 할 위치(y,x)에 맨 앞부터 순서대로 넣음어려웠던 점c++에는 배열을 한 칸씩 미는 rotate() 함수가 있는데, 자바에서는 그게 없어서 직접 구현해야 해서 번거로웠다.코드내 코드 (맘에 안 듬)import java.util.*;class Solution { static int[] dy = {0, 1, 0, -1}; // 우 하 좌 상 static int[] dx = {1, 0, -1, 0}; public int[] so.. 2024. 6. 21.