[프로그래머스/Level2] 다리를 지나는 트럭 - JAVA[자바]
·
PS/프로그래머스
난이도 : Level 2유형 : 큐 / 구현 / 시뮬레이션구현 시간 : 30분링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42583 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   문제 풀이우선 해당 문제는 문제에 대한 설명이 부족하다.예제를 보면 추측이 가능한데 아래 2가지 조건을 추가해야 한다.트럭은 1초에 1씩 전진한다.트럭은 1초에 1대씩 다리에 올라갈 수 있다. 1. Queue 자료구조를 사용해서 다리 위 트럭 객체를 관리2. currentWeight, idx, time 변수를 통해 현재 다리 위 무게, 시간, 대기 트럭의 ..
[BOJ/Gold4] 12869번 뮤탈리스크 - JAVA[자바]
·
PS/백준
난이도 : 골드 4유형 : BFS / DFS / DP링크 : https://www.acmicpc.net/problem/12869구현 시간 : 30분     문제 풀이 이 문제는 BFS / DFS 알고리즘의 유형으로, 뮤탈리스크는 한 번의 공격에서 세 개의 SCV에 각각 9, 3, 1의 피해를 줄 수 있으며, 세 개의 공격 순서를 자유롭게 선택할 수 있습니다.즉, 모든 가능한 공격 순서를 고려하여 최소 공격 횟수를 찾아야 하는 문제입니다. 얼핏 보면 SCV 체력을 내림차순으로 정렬하고, 9 -> 3 -> 1 순서로 공격하면 쉽게 해결할 수 있지 않나? 싶지만아래 예제를 보면 그리디하게 문제를 해결할 수 없다는 것을 알 수 있습니다.SCV의 체력이 (12 , 10, 4)일 때첫번째 공격 -> 1, 3, 2 ..
[프로그래머스/Level2] 구명 보트 - JAVA[자바]
·
PS/프로그래머스
난이도 : Level 2유형 : 그리디 / 투 포인터 구현 시간 : 1시간 (못 품)링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42885 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   문제풀이이 문제는 그리디 알고리즘 유형으로, 최소한의 구명보트 개수로 모든 사람을 태우는 문제이다. 처음에는 A라는 사람의 무게가 주어지면 남은 사람들 중 구명보트의 무게 제한을 넘지 않는 최대값이 되는 B라는 사람을 찾아 최소한의 보트를 사용하려 했다. 만약 무게 제한을 넘지 않는 B가 없다면 A만 보트에 태우는 방식으로 접근했다. 이 접근 방식은..
[BOJ/Gold1] 1700번 멀티탭 스케줄링 - JAVA[자바]
·
PS/백준
난이도 : 골드 1유형 : 그리디 / 구현링크 : https://www.acmicpc.net/problem/1700구현 시간 : 1시간     문제 풀이 이 문제는 그리디 알고리즘 유형으로, 멀티탭에 꽂힌 전기용품 중 어떤 것을 제거해야 하는지 결정하는 문제입니다. 멀티탭의 상태를 관리하기 위해 삭제 및 삽입이 용이한 List 자료구조를 사용하여 구현하였습니다.현재 멀티탭이 비어있거나 빈 구멍이 있는 경우새로운 전기용품을 그대로 꽂습니다.새로운 전기용품이 이미 멀티탭에 꽂혀 있는 경우추가적인 작업 없이 그대로 넘어갑니다.멀티탭이 꽉 찬 상태에서 새로운 전기용품이 등장할 경우 (🔥핵심)1. 이후 사용되지 않는 전기용품이 있다면해당 전기용품을 제거합니다.2. 모든 전기용품이 이후에도 사용된다면가장 마지막에..
[BOJ/Silver2] 18353번 병사 배치하기 - JAVA[자바]
·
PS/백준
난이도 : 실버 2유형 : 동적 계획법 / LIS링크 : https://www.acmicpc.net/problem/18353구현 시간 : 30분    문제 풀이이 문제는 ‘가장 긴 감소하는 부분 수열’을 찾는 문제로, LIS(가장 긴 증가하는 부분 수열) 알고리즘을 변형해서 해결할 수 있습니다.DP 테이블은 각 위치에서 끝나는 가장 긴 감소하는 부분 수열의 길이를 저장합니다. 예를 들어, dp[i]는 i번째 숫자를 마지막으로 포함하는 가장 긴 감소하는 부분 수열의 길이를 의미합니다.각 숫자를 기준으로 그 이전 숫자들과 비교합니다.만약 현재 숫자(arr[i])가 이전 숫자(arr[j])보다 작다면, 이전 숫자를 포함하는 감소하는 수열에 현재 숫자를 추가할 수 있습니다.이 경우, dp[i]를 dp[j] + ..
[프로그래머스/Level3] 블록 이동하기 - JAVA[자바]
·
PS/프로그래머스
난이도 : Level 3유형 : BFS / 구현구현 시간 : 1시간링크 : https://school.programmers.co.kr/learn/courses/30/lessons/60063 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   문제 설명로봇개발자 "무지"는 한 달 앞으로 다가온 "카카오배 로봇경진대회"에 출품할 로봇을 준비하고 있습니다. 준비 중인 로봇은 2 x 1 크기의 로봇으로 "무지"는 "0"과 "1"로 이루어진 N x N 크기의 지도에서 2 x 1 크기인 로봇을 움직여 (N, N) 위치까지 이동 할 수 있도록 프로그래밍을 하려고 합니다. 로봇이 이동하는 지도는 가장 왼쪽, 상단의 좌..
[BOJ/Gold5] 15686번 치킨 배달 - JAVA[자바]
·
PS/백준
난이도 : 골드 5유형 : 조합 / 구현 / 백트래킹링크 : https://www.acmicpc.net/problem/15686구현 시간 : 30분       문제풀이위 문제의 핵심은 M개의 치킨집의 조합에 따라 최소 치킨 거리는 달라진다. 이 말이 무슨 뜻이냐면 항상 작은 치킨 거리의 합을 가지는 경우를 선택하면 안되므로 그리디 알고리즘은 사용할 수 없다. 예를 들어 6개의 치킨집 중 하나의 치킨집을 폐업시킬 때는 6개의 치킨집을 순회하며 하나씩 치킨집을 삭제해보고 최소값을 찾으면 되지만, 이 후 5개의 치킨집 중 하나의 치킨집을 다시 폐업시킬 때는 이전의 선택에 영향을 받을 수 있다는 의미이다.  따라서 현 상황에서 가장 좋은 선택을 하는 그리디 알고리즘은 사용하지 못하고, N개의 치킨집중 M개의 치..
[프로그래머스/Level3] 기둥과 보 설치 - JAVA[자바]
·
PS/프로그래머스
난이도 : Level 3유형 :구현 / 시뮬레이션구현 시간 : 2시간 (못품)링크 : https://school.programmers.co.kr/learn/courses/30/lessons/60061 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr       문제풀이위 문제는 많은 조건을 생각해야하는 빡구현 문제다. 주어진 좌표에 기둥과 보를 설치하는 구현은 정말 쉽지만, 기둥과 보를 삭제할 때 고려해야할 경우의 수는 매우 많다. 해당 경우의 수에 대해서 설명해보겠다. 나는 처음 구현할 때, 설치, 삭제 모두 전부 경우의 수를 고려해서 코드를 구현했는데 복잡한만큼 실수가 많아서 실패했다.  포기 후 다른..
[프로그래머스/Level3] 자물쇠와 열쇠 - JAVA[자바]
·
PS/프로그래머스
난이도 : Level 3유형 : 구현 / 시뮬레이션구현 시간 : 1시간링크: https://school.programmers.co.kr/learn/courses/30/lessons/60059 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr       문제풀이위 문제는 2차원 배열에 대한 높은 이해도가 필요하다. 제한사항을 자세히 보면, Key와 Lock의 크기가 3에서 최대 20으로 작은 것을 보니 완전탐색을 이용해서 풀 수 있다. 나는 (Lock 배열 길이 + Key 배열의 길이 * 2)의 크기의 2차원 배열을 새로 선언하여, 정사각형의 중앙에 Lock 배열을 삽입하고, 모든 경우를 전부 탐색하도록 구..
[프로그래머스/Level2] 문자열 압축 - JAVA[자바]
·
PS/프로그래머스
난이도 : Level 2유형 : 문자열 / 구현구현 시간 : 1시간링크: https://school.programmers.co.kr/learn/courses/30/lessons/60057 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr        문제풀이주어진 문자열을 1 ~ 문자열의 절반 길이까지 잘라가며 압축된 문자열의 길이를 비교한다.문자열을 자를 땐, 잘라진 앞부분(target) 을 설정하고 그 뒤로 남은 문자열을 자르며 비교한다.만약 target 과 다음으로 자른 문자열(compare)이 같다면 cnt 를 1 증가시키고, 다음 문자열로 넘어간다.target 과 compare 이 같지 않은 경우..