위클리 8

프로그래머스 위클리 챌린지 12주차 - java

문제 설명 1. 피로도와 [필요피로도, 사용피로도]가 주어진다. 2. 던전을 도려면 필요피로도보다 피로도가 많아야 하고, 사용피로도는 그 던전을 돌면 소요된다. 3. 가장 많은 수의 던전을 도는 방법을 구하면 된다. 풀이 과정 // 마지막 위클리 챌린지이다. 그래서인지 굉장히 쉬운 문제로 장식했다. // 매우 간단한 브루트포스 - DFS or BFS 문제이다. 1. 모든 경우의 수를 탐색한다. 2. DFS를 돌면서 한번이라도 탐색한 곳은 다시 탐색하지 않고, 다른 모든 경우를 선택하여 진행한다. 3. 현재 피로도보다 필요 피로도가 크면 돌 수 없다. 4. 현재 피로도가 필요 피로도보다 많은 경우 방문하고, 이후 다시 해당 process를 반복한다. 5. 이걸로 구해진 경우가 끝나면 다시 방문을 하지 않은..

프로그래머스 위클리 챌린지 10주차 - java

문제 설명 1. 좌표평면상의 선분들이 주어진다. 2. 선분들이 만나는 좌표들의 정수값들만 고려한다. 3. 만나는 곳은 * 나머지는 . 으로 이루어진 최소 크기의 도형을 RETURN하면 된다. 풀이 과정 1. 이게 왜 level2문제일까....? 생각보다 난이도가 높았다. 차근차근 하나씩 구해주자. 이거 클래스 써서 하려 했더니 코드가 진짜 말도안되게 더러워져서 절차적으로 풀었다. ( 교점 구하기 ) 2. 먼저 선들이 만나는 점을 구한다. 고등학교 때에 배운 일차함수 방정식을 쓰면 된다.

프로그래머스 위클리 챌린지 8주차 - java

문제 설명 1. 명함의 가로, 세로 크기가 주어진다. 2. 명함을 담을 수 있는 가장 작은 크기의 명함지갑의 크기를 return하면 된다. 3. 명함은 눕혀서 보관할 수도 있고, 세워서 보관할 수도 있다(가로세로 위치 상관x) 풀이 과정 1. 굉장히 간단한 문제이다. 2. 명함의 가로, 세로 기준으로 긴 값과 짧은 값들을 저장한다. 3. 긴 값들의 최대값, 짧은 값들의 최대값을 곱하면 답을 구할 수 있다. 4. 여기서 구현한 코드는 process별로 나누어서 길게 나왔지만, 실제로는 짧은값 긴값 두개를 만들어서 이를 바로바로 구하면 for문을 한 번만 사용해서도 충분히 구할 수 있을 것이다. 코드 코드2

프로그래머스 위클리 챌린지 7주차 - java

문제 설명 1. 들어온 사람, 나온 사람이 주어진다. 2. 사람들이 차례로 들어오고, 현재 들어온 사람중 나온 사람에 해당하는 사람이 있으면 순서대로 나간다. ex) enter -> [1, 4,3, 2] leave -> [3, 4, 2, 1] ----> 1번 입장, 4번 입장, 3번 입장, (여기서 leave의 처음인 3이 들어왔으니까) 3번 퇴장, 4번 퇴장, 2번 입장, 2번 퇴장, 1번 퇴장 요런식 3. 입장한 사람들끼리는 서로 만난다. 3. 만난 사람들의 수를 return한다. 풀이 과정 1. 굉장히 간단한 문제이다. 2. 선입선출법이니까 Queue를 사용하고, 사람들의 입/퇴장을 세 주므로 ArrayList로 사람들을 구한다. 3. 전부 다 나가면 계산이 종료되므로 leave관련 queue가 사..

프로그래머스 위클리 챌린지 6주차 - java

문제 설명 1. 복서의 몸무게, 전적이 주어진다. 2. W(이김), L(짐), N(경기안함) 이고, 경기를 안하면 체크하지 않는다. 3. 승률 - 자기보다 무거운사람을 이긴 횟수 - 자기 몸무게 의 순서로 동률이면 뒤의 것을 고려하여 rank를 return하면 된다. 풀이 과정 1. 이것도 정렬을 사용하면 매우 간단한 문제이다...사실 시간복잡도에서 걸릴 것 같았는데 어째 통과가 되었다. 2. 전체경기수, 이긴수를 구하서 승률 / 자기보다 무거운 사람 이긴 수 / 자기 몸무게를 배열에 저장한다. 3. compare의 로직을 이용하여 간단하게 순서대로 정렬하면 구해진다. 4. 노드별 compare구현하기~ 코드 import java.util.*; class Solution { public int[] sol..

프로그래머스 위클리 챌린지 5주차 - java

문제 설명 1. 'A' 'E' 'I' 'O' 'I' 다섯글자로 단어를 만들수 있다. 2. 단어 길이는 5개 이하이며, A AA AAA AAAA AAAAA AAAAE ... 이런 순서로 진행된다. 3. 단어가 주어지면, 이게 몇번째 단어인지 return하면 된다. 풀이 과정 1. 문제의 테스트 케이스를 보면 알겠지만, 문자들에 대해 완전탐색을 하나하나 진행하면 절대 안될것이다...안해봤지만 그럴것같음. 2. A로 시작하면 A, AA ..... E로 시작하면 E, EA ....... 이렇게 진행되는데, 이를 통해 수식을 통해 구할 수 있다고 유추 가능하다. 3. A는 1이고, I는 1563인데 이를 통해 E는 782이고 각각 시작하는 문자를 기준으로 781의 간격이 떨어져 있다. 4. A,E,I,O,U 5글..

프로그래머스 위클리 챌린지 4주차 - java

저번주와 비교도 안되게 쉬운 문제가 나왔다...뭐지..... 문제 설명 1. table로 맨 처음 노드에는 직무가, 이후 노드부터는 그 직무가 선호하는 언어가 주어진다. 2. table의 선호하는 언어의 점수는 table전체 언어의 개수만큼 시작해서 내려갈수록 하나씩 뺸다 ( 예를 들어, 선호언어 6개 중 2번째로 선호하는 언어의 경우 (6-2=4점) 3. languages와 preference의 길이는 같고 해당 languages 점수는 동일 위치 preference가 된다. 4. table언어 선호도 x preference를 구하고, 그 언어 선호도의 총합이 가장 높은 직무를 return한다. 5 동일한 점수의 직무가 있으면 사전순으로 빠른 직업군을 return한다. 풀이 과정 1. 언어들을 짤라서 ..

프로그래머스 위클리 챌린지 3주차 - java

(원래 전부터 풀던건데 테케 3개를 통과 못해서 안되고있었다....바보같이 한줄을 빼먹어서 그랬다. 그래서 다른 공부도 못하고 진도가 느려짐.......) 문제 설명 1. board와 table이 각각 배열로 주어진다. 2. 0은 빈칸, 1은 블록으로 채워진 부분이다. 3. board의 빈 부분을 table의 블록으로 채워주면 된다. 4. 블록은 회전할 수 있고, 뒤집을수는 없다. 빈칸은 하나의 블록으로 딱 맞게 채워야만 한다. 이를 채우면 이렇게 되는 것이고, 답은 '14'를 return하게 된다. 풀이 과정 진짜 힘들게 구했다...풀이 알고리즘 자체는 생각하기 쉬운데, 이를 구현하는 것이 힘들다. 1. 먼저 각각 game_board의 경우는 빈칸(0) , table의 경우는 블록(1) 에 해당하는 것..