코테 74

99클럽 코테 스터디 22일차 TIL 완전탐색(피로도)

https://school.programmers.co.kr/learn/courses/30/lessons/87946 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 현재 피로도로 탐험할 수 있는 최대 던전 수를 구하는 문제.어떤 '순서'로 탐험하느냐에 따라 최대 던전 수가 달라진다. 범위가 크지 않은 것을 참고하여 순열로 구현했다.1. 탐험할 던전의 순서를 순열로 정한다.2. 현재 던전 순서에 따라 탐험 가능한 던전 수(cnt)를 구하고, 이때 마다 최댓값(answer)으로 갱신한다.3. 모든 경우를 구하고 정해진 최댓값을 반환한다. import java.util.*;class Solution { ..

99클럽 코테 스터디 21일차 TIL 완전탐색(카펫)

https://school.programmers.co.kr/learn/courses/30/lessons/42842 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 그냥 수학처럼 풀었다,,1) x >= y2) x + y = (brown / 2) + 2;3) xy = brown + yellow이 3가지 조건을 만족하는 값을 배열에 저장하면 된다! class Solution { public int[] solution(int brown, int yellow) { int[] answer = new int[2]; for(int x=brown; x>=0; x--){ ..

99클럽 코테 스터디 20일차 TIL 완전탐색(모의고사)

https://school.programmers.co.kr/learn/courses/30/lessons/42840 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 우선 삼인방의 답이 반복되니 반복되는 구간을 1차원 배열에 지정했다.값으로 들어온 정답 배열과 비교해서 각 삼인방의 정답개수를 저장해둔다.정답개수를 탐색하며 최댓값(동점 포함)을 구한다.이 최댓값을 가진 사람의 번호를 저장해 리턴한다. 처음에 제출하고 런타임에러가 엄청 났는데, 알고보니...삼인방 정답을 확인할 때, 단순히 p1[i] 형식으로 비교하고 있었다..각 삼인방의 배열의 크기가 지정되어 있기에 들어오는 answers 배열의 크기에 따라..

99클럽 코테 스터디 19일차 TIL 그리디(강의실)

https://www.acmicpc.net/problem/1374 뒤에 오는 강의의 시작 시간이 앞 강의에 포함되는 지 확인하면 되는 문제이다.(단, 여러 강의실이 사용되고, 각 강의실마다 끝나는 시간이 다르니 이 경우를 모두 확인해 주어야 한다.)1. 우선 1차로 강의 시작시간을 오름차순으로 정렬하고, 시작시간이 같을 땐 종료시간을 기준으로 오름차순 정렬한다.(람다식 사용)2. 첫 번째 강의의 종료 시간을 pq에 넣는다. (가장 빨리 끝나는 강의실에 다음 강의를 배정해야하므로 우선순위큐를 사용했다.)3. 이전 강의의 가장 빨리 끝나는 시간이 현재 강의의 시작 시간보다 클 경우 (강의 시간이 겹칠경우) 강의실 수(cnt)를 1 증가시키고, 이전 강의 종료 시간과 현재 강의 종료 시간을 모두 pq에 넣는다..

코테/백준 2024.11.15

99클럽 코테 스터디 18일차 TIL 그리디(센서)

https://www.acmicpc.net/problem/2212아 오늘은 아이디어를 떠올리는 게 쫌 어려웠다,,처음엔 이전 집중국과의 거리와 다음 센서 사이의 거리를 비교해서 더 이득인 경우를 택하는 형식으로 구현했는데,이 경우 집중국의 개수는 맞았지만 거리를 계산할 때 거리의 최솟값을 만족하지 못했다..그래서 고민고민하다가 구글링으로 스리슬쩍 구경했느데와 역으로 제일 먼 거리를 빼면 되는 아주 간단한 아이디어 였다,,그래서 결론은 1. 받은 센서의 좌표를 오름차순으로 정렬한다.2. 센서 사이의 거리를 구해서 배열에 저장한다.3. 이 센서 사이의 거리를 정렬해서 가장 거리가 먼 경우를 k-1 개 제외한 거리의 값을 더하면 최솟값이다.(k=2 일 때, 1(k-1)번 나누면 2그룹으로 나뉘고 이 2그룹에 ..

코테/백준 2024.11.14

99클럽 코테 스터디 17일차 TIL 그리디(밤양갱)

https://www.acmicpc.net/problem/31926요 문제를 통해 '애드 혹'에 대해 찾아봤다. 애드 혹은 특정 상황에서만 정답이 되고 일반화될 수 없는 것을 의미한다. (cf.달디달고 달디단)처음엔 그리디 문제 같아서 입력크기 잘 안봤다가 디피로 만들어서 메모리가 터졌다.그리고는 규칙을 찾으려고 주석에 분석했는데 (요런 문제가 헷갈려서 더 어려운 거 같다 ㅠ)앞 달디달고는 무조건 8이 되고, 뒤 달디단은 홀수 짝수 인 경우에 조금은 달라지긴 하지만 결국 2가 된다는 것을 알 수 있다.그리고 중간의 달디달고는 1, 2, 4, 8 씩 복사를 통해 생성된다는 것을 알 수 있다.따라서 10은 고정이고, n을 2로 나누면서 반으로 쪼개는 횟수를 더해주면 답이 된다. package Study.We..

코테/백준 2024.11.13

99클럽 코테 스터디 16일차 TIL 그리디(게임을 만든 동준이)

https://www.acmicpc.net/problem/2847점수를 최소한으로 내려서 레벨점수를 증가하게 만들어야 하는 문제이다.이 경우 뒤에서부터 순차적으로 탐색하는 경우 최소한으로 만들 수 있다.뒤 점수보다 앞 점수가 같거나 크면 뒤 점수보다 1만큼만 작게 만들어줄 때 최소한으로 점수를 감소시키면 된다.** 1감소가 1점이므로 절댓값으로 계산해주어야 한다 package STUDY.Week03;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Day16_BOJ_2847_게임을만든동준이 { public static void main(String[] args) th..

코테/백준 2024.11.12

99클럽 코테 스터디 15일차 TIL 그리디(카드문자열)

https://www.acmicpc.net/problem/13417 카드를 순서대로 하나씩 가져오면서 사전 순으로 가장 빠르게 정렬하는 것. 이때 가장 왼쪽 또는 가장 오른쪽에만 둘 수 있다.핵심 아이디어는 문자를 하나씩 보면서 맨 앞 문자보다 순서가 빠르면 (아스키코드 값이 작으면) 맨 왼쪽에 두고,맨 앞 문자보다 순서가 느리면 (아스키코드 값이 크면) 맨 왼쪽에 두어야 겠다고 생각했다.그리고 자료구조는 Deque 또는 ArrayList 중에 고민하다가 후자를 택해 구현했다.(Deque를 사용한다면 peekFirst와 addFirst / add 를 사용하면 된다) package STUDY.Week03;import java.io.BufferedReader;import java.io.IOException;..

코테/백준 2024.11.12

99클럽 코테 스터디 14일차 TIL 그리디(거스름돈)

https://www.acmicpc.net/problem/14916동전의 개수를 최소로 사용하려면 5원을 최대한 사용해야한다.그리고 2원으로 나눠져야 하므로 5원을 가지고 짝수로 만들어야 함을 알 수 있다.따라서. n이 홀수일 때와 짝수일 때를 나누어 홀수면 5를 최대의 홀수번으로 나누고, 짝수면 5를 최대의 짝수번으로 나누고자 했다. *** 5미만이 들어오면 짝수일 때는 2로 나누어지지만, 홀수일 때는 낼 수 있는 방법이 없으니 -1을 출력해야한다.package STUDY.Week02;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Day14_BOJ_14916_거스름돈..

코테/백준 2024.11.11

99클럽 코테 스터디 13일차 TIL 그리디(고양이는 많을수록 좋다)

https://www.acmicpc.net/problem/27961 이런문제는 결과값을 가지고 입력값을 만들어가는 경우를 생각해야 한다.그리고 그 과정에서 최소 연산을 할 수 있도록 해야하는데, 이 문제의 경우는 생성과 복제 중 복제이다.결과값에서 최대한 복제를 할 수 있는 한 하고 생성을 해서 입력값으로 만들어 가는 연산의 수를 구하면 된다.즉, 6일 때 -> 3(최대 2배로 복제) -> 2(최대 2배 이하로 복제할 경우) -> 1(최대 2배로 복제) -> 0(생성) => 4가 된다.이를 코드로 구현하면 아래와 같다.** 입력값이 0일 경우엔 무조건 0임을 고려해주어야 한다 package STUDY.Week02;import java.io.BufferedReader;import java.io.IOExce..

코테/백준 2024.11.10