[프로그래머스] PS/Java 62

[lv2] 단체사진 찍기

https://school.programmers.co.kr/learn/courses/30/lessons/1835# 구현 문제 문제에서 조합으로 8명의 친구들을 뽑는 경우의 수는 8! = 40320이므로,조합으로 일단 뽑고 100개의 조건을 모든 조합에 대해 판별해도 시간이 널널하다. 특이 사항전역변수로 answer을 선언하면, solution 메서드 스코프에서 answer  변수 초기화를 해줘야한다. 아니면 오답을 받는다.(프그스 풀면서 처음 보는 패턴이었다;;)https://school.programmers.co.kr/questions/13442 class Solution { static int answer, F = 8, D; static char[] pick = new char[F], frd = ..

[lv4] 도둑질

https://school.programmers.co.kr/learn/courses/30/lessons/42897 시간 제한 빡빡한 원형 DP 문제다.  풀이 1. 원형 DP (0번째 집을 훔쳤으면, M-1번째 집을 훔칠 수 없음)=> 배열 idx를 0 ~ M-2, 1 ~ M-1 까지 고려하는 경우로 나누어 DP를 2번 수행한다. 2. DP기록 dp[i][0], dp[i][1]을 각각 i번째 집을 안훔치는/훔치는 경우로 두었는데, 이것만으로도 시간 초과가 난다.=> 배열 대신에 변수에 기록하고, swap하며 탐색한다.   시간 초과 코드더보기// 시간 초과 1. 2차원 DP 배열 2개 + money 배열 2개 사용 import java.util.*; class Solution {     public in..

[lv3] 표현 가능한 이진트리

https://school.programmers.co.kr/learn/courses/30/lessons/150367#   1. 입력 전처리 {1,3,7,15,31,63}는 각각 높이가 1 ~ 6인 포화 이진 트리의 노드 개수이다. 주어진 입력을 2진법으로 변환했을 때, 비트(= 노드)개수가 모자라다면 그만큼 앞에 0(= 더미 노드)을 채워준다. 이는 포화 이진 트리를 만드는 과정이다. e.g.)2 -> 01(2) -> 001(2)  2. 가능한 해인지 판별 true인 조건은 다음과 같다. (0 : 더미 노드, 1 : 더미가 아닌 노드) - 루트 노드는 반드시 1이어야 한다.- 자식 노드가 0이라면, 부모 노드는 0 or 1이어야 한다.- 자식 노드가 1이라면, 부모 노드는 1이어야 한다. 재귀를 통해, ..

[lv2] 디펜스 게임

https://school.programmers.co.kr/learn/courses/30/lessons/142085 그리디 + 이분탐색 1. 그리디 접근m개 라운드의 enemy를 막으려고 시도할 때, k(무적권)는 항상 enemy[0~m-1] 중 상위(enemy 값이 큰) k개의 라운드에 사용한다. => 우선순위 큐 사용 2. 이분 탐색탐색 범위를 특정할 수 있고, 가능한 원소(answer)중 최대 값을 찾아야 하므로(범위를 확정적으로 좁힐 수 있으므로) 적용 가능하다. => 상위 k 개를 제외한 원소의 합 midVal을 n과 비교하며 이분 탐색을 진행한다.import java.util.*;class Solution { public int solution(int n, int k, int[] enem..