본문 바로가기

알고리즘

(28)
프로그래머스 베스트앨범 import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.*; import static java.util.stream.Collectors.*; public class algo { public static void main(String[] args) { String[] genres = {"classic", "pop", "classic", "classic", "pop"}; int[] plays = {500, 600, 150, 800, 2500}; solution(genres, plays); } public static c..
프로그래머스 위장 import java.util.*; import static java.util.stream.Collectors.*; public class algo { public static void main(String[] args) { String[][] clothes = { {"yellowhat", "headgear"}, {"bluesunglasses", "eyewear"} ,{"green_turban", "headgear"}}; solution(clothes); } public static int solution(String[][] clothes) { return Arrays.stream(clothes) .collect(groupingBy(p -> p[1], mapping(p -> p[0], counting()..
프로그래머스 완주하지 못한 선수 import java.util.*; class Solution { public class MarathonInfo { String[] participant; String[] completion; String[] noCompletion; public MarathonInfo(String[] participant, String[] completion) { this.participant = participant; this.completion = completion; } public void setNoCompletion(String[] noCompletion) { this.noCompletion = noCompletion; } } public String[] computeNoCompleInfo(MarathonInf..
백준 17142 연구소 3 1. 연구소에 비활성 바이러스 5개가 존재하고 3개를 활성시킬시 5개에서 3개를 뽑는 경우의 수를 다 구해야 한다.(dfs로 구현했다) 2. 3개를 선정후 각 사항에 맞게 몇시간후에 바이러스가 연구소를 차게 하는지 bfs를 통해 계산한다. - 여기서 유의 사항에 주목해야 하는데 중요한건 '비활성 바이러스'를 벽으로 보면 안된다는 거다. 즉 다 채우고 비활성바이러스가 나머지 항목에 있으면 끝내줘야 한다. 비활성바이러스쪽으로 들어가면서 시간을 더 투자해선 안된다. 해결방법은 처음에 감염시켜야 할 연구소방의 갯수를 기억하고 나중에 비교한다. (처음 한 방법은 한번 탐색할때마다 전체 염구소를 탐색해서 끝났는지 확인하는건데 이 경우는 너무 많은 시간을 소비하는 별로인 알고리즘이였다.) 3. 위치를 변경하고 계산해..
3190번 뱀. 하..... 변수형은 int로 써야하는걸 char로 써서 1시간을 날렸다. 오류 찾느라..... 디버깅 모드 할때 어쩐지 100 'd' 일케 되있더라 뭐지 했는데 결국 자료형의 값을 넘어서서 -127로 변해서 그런거였다. ..... 자료형 잘보자...... 그리고 코드 최적화 하자. #include #include #include #include using namespace std; typedef struct { int time; char dir; }time_dir_info; typedef struct { int apple_po_x; int apple_po_y; }apple_po_info; typedef struct { int position_x; int position_y; int dir; }snake..
백준 1931 회의실 배정 처음 생각했을때 큐를 사용해서 모든 경우의 수를 탐색하는 방법을 사용했다. 하지만 이는 O(N^2)의 시간복잡도를 가지는데 최대 100000개의 회의가 생길수 있으니 100000^2=10000000000 즉 최악의 경우 100억번의 연산이라는 결과를 맞이하게 된다. 이는 2초안에 풀수 없음을 의미하기 때문에 시간초과라는 글을 본뒤 푸는 방법을 변경했어야 했다. 또 생각든 게 끝나는 시간의로 솔팅을 하게 된다면 해결이 가능하지 않을까였다. 끝나는 시간으로 솔팅을 하게 되면 (1,100), (2,101), (101, 800), (800,3000) , (100,10000)이면 1이 100으로 100이 10000으로 가기 때문에 2번째부터 시작하는게 맞지 않나라는 고민이 들었다. 하지만 이는 의외로 간단하게 풀..
백준 1644 소수의 연속합. 문제 하나 이상의 연속된 소수의 합으로 나타낼 수 있는 자연수들이 있다. 몇 가지 자연수의 예를 들어 보면 다음과 같다. 3 : 3 (한 가지) 41 : 2+3+5+7+11+13 = 11+13+17 = 41 (세 가지) 53 : 5+7+11+13+17 = 53 (두 가지) 하지만 연속된 소수의 합으로 나타낼 수 없는 자연수들도 있는데, 20이 그 예이다. 7+13을 계산하면 20이 되기는 하나 7과 13이 연속이 아니기에 적합한 표현이 아니다. 또한 한 소수는 반드시 한 번만 덧셈에 사용될 수 있기 때문에, 3+5+5+7과 같은 표현도 적합하지 않다. 자연수가 주어졌을 때, 이 자연수를 연속된 소수의 합으로 나타낼 수 있는 경우의 수를 구하는 프로그램을 작성하시오. 처음 문제를 풀때 소수를 구하고 하나씩..
[소수 알고리즘]에라스토테네스의 체. 특정 수가 소수인가를 구하는 문제에서는 좋지 않지만 특정 수까지의 소수를 구하라를 구할때 사용하는 알고리즘이다. 원리는 간단하다. 2부터 시작해서 그 배수를 없애 나가면 된다. 처음을 보자. 2 4 6 8 10~ 순으로 특정수까지 줄여나간다. 이를 표현하면 for (int i=x*x; i