알고리즘 공부/문제 풀이
-
[프로그래머스] 스택/큐 - 다리를 지나는 트럭알고리즘 공부/문제 풀이 2020. 8. 11. 00:31
문제의 "순서가 있는 트럭"이라는 말에서 큐를 떠올렸다. 큐를 이용해서 구현해야지 까지... 생각하고 여러 가지 방안을 생각해보았는데 특정한 경우에만 적합한 방법이라는 것을 알았다. 문제의 예시에서도 그렇고, 내가 손으로 생각해 볼때도 계속 시간당 bridge가 어떻게 될까를 생각하며 고민하였다. 그래서 결과 중심으로 문제를 푸는 것이 아닌 시간 단위의 과정으로 bridge 상태를 고려하며 풀어야겠다고 생각했다. 따라서 현재 bridge를 나타내는 변수를 만들었다. bridge의 크기는 문제에서 주어지는 bridge_length이고, 1초가 지날 때마다 배열의 값이 한 칸씩 왼쪽으로 이동하게 된다. 다리 위에 놓인 트럭의 무게 합이 다리가 버티는 weight보다 작은 경우 큐에서 값을 꺼내와 bridge..
-
[프로그래머스] 스택/큐 - 기능개발알고리즘 공부/문제 풀이 2020. 8. 10. 14:50
static int[] solution(int[] progresses, int[] speeds) { //정답 배열의 크기 알수 없으므로 ArrayList로 선언 ArrayList list_answer = new ArrayList(); int[] left=new int[progresses.length]; //남은 퍼센트 int[] days=new int[progresses.length]; //배포 가능일 수 //left,days 초기화 for(int i=0;ispeeds[i]*day) day++; days[i]=day; } int temp=0; for(int i=0;i
-
[프로그래머스] 스택/큐 - 주식가격알고리즘 공부/문제 풀이 2020. 8. 10. 13:59
주어진 prices에서 값을 하나씩 읽어 들어오며, 이전의 prices 값보다 크거나 같다면 인덱스에 해당하는 값을 하나씩 증가시키는 방향으로 코드를 작성하였다. 단, 숫자가 작다가 다시 커지는 경우도 있으므로 가격이 떨어진 후 다시 값이 증가되어 값이 count 될 수 있으므로 prices와 같은 크기의 flag boolean 변수를 만들어 이미 값이 떨어진 변수는 더 이상 count 할 수 없도록 처리하였다. 마지막 prices는 값의 변동이 일어나지 않으므로 무조건 0값이다. 따라서 반복문에 포함시키지 않았다. static int[] solution(int[] prices) { int[] answer = new int[prices.length]; boolean[] flag=new boolean[pr..
-
[프로그래머스] 정렬 - H-index알고리즘 공부/문제 풀이 2020. 8. 6. 23:57
문제를 처음에 보고 말이 어렵다고 생각했다. 하지만, 막상 구현해보니 간단하게 코드를 짤 수 있었다. 우선 h-index의 조건은 두 가지이다. 1. h개 이상의 논문에 대해서 2. h번 이상의 인용이 이루어져야한다. 첫번째 조건은 index를 이용하여 충족시키도록 하였다. 주어진 배열을 오름차순으로 정렬한 후, 큰 수부터 접근하였다. 1,3,4,5,7 을 예시로 들어보자 초기 상태는 1,3,4,5,7,*라고 생각하자. *은 현재 가리키고 있는 인덱스라고 생각하면 된다. 당연히 h-index는 0이 될 것이다. 나는 h-index를 먼저 증가시키고 위의 두가지 조건을 만족시키지 않으면 다시 감소시킨다음 return하도록 코드를 짰다 따라서 h-index는 1이되고 가리키는 값은 7이 되어 1,3,4,5,..
-
[프로그래머스] 정렬 - 가장 큰 수알고리즘 공부/문제 풀이 2020. 8. 6. 23:18
처음 문제를 보고 든 생각은 큰 자리수부터 비교해서 정렬할까? 모두 같은 자리수로 만들어서 sort한뒤 예외처리할까? ...... 이었다. 이 생각들은 전부 입력을 int로만 생각했기 때문이다. 첫 번째 생각에서 숫자로의 비교가 아닌 문자로의 비교를 생각하여 사전식 배열을 생각하였으면 문제가 더 빨리 풀렸을 것 같은데.. 숫자라는 집착때문에 수의 연산을 중요시 한것 같다. 그래서 처음 내 풀이를 보면 입력 받은 값들을 같은 자리수로 만들었고, 3,30이 입력으로 들어오는 경우 303이 아닌 330이 출력되어야 하기 때문에 이를 위한 예외처리를 하여 출력하는 방식이다 class Array{ int before; // 입력받은 number int after; // 자리수 맞춘값 } //기본적으로 내림차순 정..
-
[2019 카카오 겨울인턴] 불량사용자 (JAVA)알고리즘 공부/문제 풀이 2020. 5. 8. 21:11
도움을 받아 문제 해결함.. 1. 각각 banned_id에 해당하는 candidate 등록 1) banned_id의 "*" 을 정규식으로 사용가능한 "."으로 바꿔주기 -> replace이용 2) 길이 같을 때 정규식이 일치한다면 candidate 넣기 -> matches 메소드 이용 2. 모든 candidate에 대해 dfs로 탐색해주기 package kakao; import java.util.*; public class bannUser { static Integer[][] candidate; static boolean[] visit; static int solution(String[] user_id, String[] banned_id) { int answer = 0; candidate=new Inte..