알고리즘
-
BOJ) 도로와 신호등알고리즘/백준 2020. 6. 10. 15:42
도로와 신호등 2980번: 도로와 신호등 문제 상근이는 트럭을 가지고 긴 일직선 도로를 운전하고 있다. 도로에는 신호등이 설치되어 있다. 상근이는 각 신호등에 대해서 빨간 불이 지속되는 시간과 초록 불이 지속되는 시간을 미리 구 www.acmicpc.net 풀이 특별한 알고리즘 없이 구현으로 풀어냈다. 먼저 1초에 1m씩 움직이기 때문에 기본적으로 K초를 이동해야 한다. 이후에 신호등 정보들이 들어오면, 신호등이 빨간불인 경우에 대기하는 시간도 더해주어야 한다. 문제 조건이 처음 시작이 모두 빨간불이기 때문에, 구해주는 식은 쉬웠다. 신호등마다 대기시간을 담는 waitTime을 선언해줘서, 해당 신호등에 도착하는 시간을 구해줬다. 그리고, 도착 시간에 신호등 색을 구분해주었다. (도착시간 %=(R+G) ..
-
BOJ) Crazy_aRcade_Good (크레이지 아케이드)알고리즘/백준 2020. 6. 9. 23:31
Crazy_aRcade_Good 17290번: Crazy_aRcade_Good 크레이지 아케이드를 하면서 폭탄을 피하려고 한다. 게임을 하는 곳은 10×10 크기의 배열로 나타낼 수 있고, 폭탄이 있는 칸은 o, 없는 칸은 x로 나타낸다. 폭탄이 터질 때, 폭탄과 같은 행 또는 �� www.acmicpc.net 풀이 맵을 돌면서 안전 구역을 찾는 기본적인 구현 문제다. 조금 더 수월하게 풀기 위해, 입력받은 map을 char[][]로 저장해주었다. 또한, Bazzi 클래스를 만들어서 좌표와 걸음 수를 저장했다. (넥슨 캐릭터 중에 제일 귀여워서 배찌로 클래스를 만들었다...) 이후, 처음 입력받은 위치 좌표를 Bazzi에 담아 큐에 담고 우선순위 큐에 담아 맵을 탐색한다. (탐색은 상하좌우 4방향) vi..
-
BOJ) 김식당알고리즘/백준 2020. 6. 9. 23:23
김식당 14612번: 김식당 인하대학교 축제를 맞이하여 알고리즘 동아리 CTP에서는 식당을 열기로 하였다. 요리는 세진이가 하게 되었고, 주문을 받는 것은 한솔이가 하게 되었다. 식당의 음식이 너무 맛있어서 주문은 끊� www.acmicpc.net 풀이 sleep을 출력하는 부분에서 조금 시간이 걸렸지만, 오래 걸리지 않고 풀었다. 처음에는 sleep을 모든 명령이 끝난 후에만 출력해줬었는데, 중간에 식당이 쉬고있는 기간에 sleep을 출력해줘야 한다는 것을 알고 고쳤다. 처음에 배열로 할까 생각하다가, 조금 복잡해질 것 같아서 ArrayList를 이용해서 풀었다. 그러다 보니 테이블 number인 m이 필요가 없었다. 로직 1. 주문 수를 입력받는다. 2. 주문에 따라서 order, sort, comp..
-
프로그래머스 Lv.3) 정수 삼각형 (DP)알고리즘/프로그래머스 고득점 Kit 2020. 6. 4. 16:33
정수 삼각형 코딩테스트 연습 - 정수 삼각형 [[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] 30 programmers.co.kr 풀이 DP를 푸는 방법 중 두 번 모두 bottom-up 방식으로 문제를 풀었다. 문제의 조건은, 삼각형 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 최대 값이 되는 것이다. 그래서 첫번째 풀었을 때는, 다른 분의 풀이를 보고 이해했던 것 같다. 첫번째 푼 방식은 위의 두 경로 중 최대 값을 같는 경로로 탐색하면서 마지막에 도착한 다음, 정렬을 통해 가장 큰 값을 리턴해주었다. 두번째 푼 방식은, 이 경우, out of idx 방지를 신경써주지 않아도 되고, sort를 따로 해주지 않아도 된다는 생각에서 풀이 ..
-
프로그래머스 Lv.3) 등굣길 (DP)알고리즘/프로그래머스 고득점 Kit 2020. 6. 4. 14:45
등굣길 코딩테스트 연습 - 등굣길 계속되는 폭우로 일부 지역이 물에 잠겼습니다. 물에 잠기지 않은 지역을 통해 학교를 가려고 합니다. 집에서 학교까지 가는 길은 m x n 크기의 격자모양으로 나타낼 수 있습니다. 아래 그림은 m = programmers.co.kr 풀이 전에 풀었던 방법과 오늘 푼 방법이 같다. 다만, 차이점이 있다면 처음에는 map을 생성하고, 모든 길을 1로 적어뒀다. 그런 뒤에, 입력받은 웅덩이 위치를 0으로 표시하고, 웅덩이에 막힌 길을 0으로 표시했다. 맵이 완성되면 맵을 돌면서 갈 수 있는 방법을 더해가며 답을 구했다. 오늘 푼 풀이도 위와 같다고 보면 된다. 처음부터 dp 배열을 생성하고, 웅덩이만 -1로 표현해줬다. 그리고 dp를 돌면서 위와 왼쪽 길이 웅덩이인지 아닌지만 ..
-
BOJ) 부분수열의 합 2알고리즘/백준 2020. 6. 3. 23:23
부분수열의 합 2 1208번: 부분수열의 합 2 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 40, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. www.acmicpc.net 풀이 오늘 문제가 너무 안풀려서 하나만 더 풀어보자 하고 기출문제와 유사한 문제라고해서 풀어봤다. 오랜만에 백준 문제를 풀어서 그런지 어려웠다. 그리고 백준이 바로 코딩하기에 친절하지가 않아서 처음 구조를 잡아나갈 때를 제외하고는 ide힘을 빌려야했다.. ㅠ N개의 정수로 이루어진 배열에서 부분 수열의 합이 S가 되는 경우의 수를 구하는 문제다. N은 40 이하의 수, S는 -1,000,000 ~ 1,00..
-
프로그래머스 Lv.3) N으로 표현 (DP)알고리즘/프로그래머스 고득점 Kit 2020. 6. 3. 18:30
N으로 표현 코딩테스트 연습 - N으로 표현 programmers.co.kr 풀이 고득점 Kit의 DP에 있는 문제다. 예전에 풀었을 때, DP로 풀지 않고 DFS로 풀었기 때문에 DP로 풀고자 했지만, 실패했다. 그래서 검색을 해봤더니 4중 for문을 돌리면서 답을 찾는 글들만 보였다. 좌표를 탐색하는 시뮬레이션 문제가 아닌 이상은, 4중 for문이 가독성이 더 떨어지고 이해하기 힘들다는 주관적인 의견이다. 물론, 머리가 좋으신 분들은 이해하시는데 문제가 없겠지만, 나같은 사람들이 범접할 수 있는 영역이 아닌 것 같았다. DFS의 방법은 만들 수 있는 모든 수를 가지고 4칙 연산을 진행하는 것이다. 문제의 조건에 따라 문자 N 사용 횟수가 8이 넘어가면 -1을 반환하기 때문에, DFS가 가능했다. 또한..
-
프로그래머스 Lv.2) 큰 수 만들기 (Greedy)알고리즘/프로그래머스 고득점 Kit 2020. 6. 3. 18:13
큰 수 만들기 코딩테스트 연습 - 큰 수 만들기 programmers.co.kr 풀이 고득점 Kit 중 greedy에 해당하는 문제다. 이 문제는 전에 풀었었는데, 다시 풀기에 실패한 문제다. Lv2지만 체감상 Lv3였다.. 도저히 모르겠어서 전에 풀었던 코드를 봤는데, 내 머릿속에서 나온 코드가 아닌 것 같다. 그래서 다른 분들의 풀이를 보고 다시 풀었다. 두 풀이 모두, 탐색 범위를 변경해가면서 가장 큰 갑을 넣어주는 로직이다. 가장 큰 값을 찾았을 때, 앞에 있는 수를 모두 지울 수 있다면 답에 더해주고, 아니면 범위를 재설정하는 방법이다. count를 소진할 때 까지 진행하면서, 답을 찾는다. start, end 그리고 max와 maxIdx를 설정해주는 이유는, 완전탐색의 경우 시간초과가 뜨기 때..