코딩문제풀이 219

[Java] 프로그래머스 : 순위 검색

1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/72412 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2. 풀이 과정 처음엔 시간 계산안하고 풀어서 효율성에서 딱걸렸다. (info의 크기) x (query의 크기)는 50억으로 2중 반복문 도는 순간 무조건 효율성에서 걸린다. 따라서 메모리를 좀 더 쓰더라도 (info의 크기) + (query의 크기)가 되도록 해야한다. 구체적인 프로세스는 아래와 같다. 1) info를 돌면서, 모든 가능한 경우를 Key값으로, 점수를 Value로 한다..

[Java] 프로그래머스 : 거리두기 확인하기

문제 https://school.programmers.co.kr/learn/courses/30/lessons/81302 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 위쪽 방향은 이미 다 탐색했으므로 또 확인할 필요 없이 3방향 탐색하면서, (거리가 2 초과)거나 (범위)를 벗어나거나 (파티션이 있을 경우) 더이상 탐색을 하지 않고 종료한다. 이때, 거리가 2이하인데, 'P'가 있는 경우 답은 0으로 체크하고 더 이상 탐색하지 않는다. +) 처음엔 DFS를 떠올렸는데, 구체적인 해결 방안을 생각해내는 데 시간이 걸렸다.. 알고리즘은 꾸준히 푸는..

[Java] 백준 22866번 : 탑 보기

문제 https://www.acmicpc.net/problem/22866 22866번: 탑 보기 3번째 건물에서 볼 수 있는 건물은 2, 4, 8번째 건물로 총 3개를 볼 수 있다. 그 중 3번째 건물과 가장 가까운 건물은 2, 4번째 있는 건물로 이 중 번호가 작은 번호인 2가 답이 된다. www.acmicpc.net 풀이과정 stack을 활용하여 왼->오, 오->왼으로 각각 순회하면서 자신의 왼쪽 혹은 오른쪽으로 옆면을 볼 수 있는 건물을 찾는다.stack에는 데이터가 내림차순으로 남게 하여, 자신보다 큰 건물의 수는 stack의 크기와 동일하게 하면 된다.따라서, 자신보다 작은 값은 모두 pop시키고, 남은 stack크기를 자신이 볼 수 있는 건물 수에 더해주면 된다. 이때, stack의 top에 ..

[Java] 백준 20291번 : 파일

문제 https://www.acmicpc.net/problem/20291 20291번: 파일 정리 친구로부터 노트북을 중고로 산 스브러스는 노트북을 켜자마자 경악할 수밖에 없었다. 바탕화면에 온갖 파일들이 정리도 안 된 채 가득했기 때문이다. 그리고 화면의 구석에서 친구의 메시지를 www.acmicpc.net 풀이 과정 TreeMap은 내부적으로 레드-블랙 트리 구조를 갖추고 있어, 정렬한 자료가 필요할 때 유용하다. 따로 key를 복사해서 정렬하지 않고, 값을 넣으면서 Entry자체를 정렬하는 것이다. import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Map; import java.util.TreeMap; ..

[Java] 백준 10800번 : 컬러볼*

문제 https://www.acmicpc.net/problem/10800 10800번: 컬러볼 첫 줄에는 공의 개수를 나타내는 자연수 N이 주어진다(1 ≤ N ≤ 200,000). 다음 N개의 줄 중 i번째 줄에는 i번째 공의 색을 나타내는 자연수 Ci와 그 크기를 나타내는 자연수 Si가 주어진다(1 ≤ Ci ≤ N www.acmicpc.net 풀이과정 풀이 방법이 2가지가 있는데, 우선 구현하는 로직은 같고 정렬할 때 사용하는 방법만 다르다. [방법1]에서는 공의 정보를 모두 받은 후, Arrays.sort를 통해 O(nlogn)이 걸리는 정렬을 수행했고, [방법2]에서는 크기 별로 ArrayList를 만들어서 크기 별로 공을 모아서 사용했다. 공의 최대 가능한 개수에 비해, 크기의 종류가 훨씬 적었기..

[Java] 프로그래머스 : 가장 큰 수

문제 https://school.programmers.co.kr/learn/courses/30/lessons/42746?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 처음 생각했던 방법은 숫자들의 자리 수를 다 맞추는 것을 생각했는데, 3442, 33 일 때는 3442 > 3300으로 제대로 적용되나 3223, 32일 때는 3223 > 3200이지만 322332보다 323223이 더 크게 되어 원하는 결과를 도출할 수 없었다. 그래서 다른 사람의 코드를 대략적으로 보고난 후, 좀 더 직관적으로 생각해서, 두 숫자 중 어..

[Java] 백준 2630번 : 색종이 만들기

문제 https://www.acmicpc.net/problem/2630 2630번: 색종이 만들기 첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다. www.acmicpc.net 풀이 과정 전체에서 계속 4등분으로 자르다보면 크기가 1인 사각형까지 도달하게 된다. 크기가 1인 사각형은 자신이 흰색인지, 파란색인지 정보를 반환한다. 이를 호출한 곳에서 크기가 1인 사각형 4개의 결과를 확인하고, 모두 0이거나 1이면 그 숫자 그대로 반환하고 하나라도 일치하지 않으면 색종이 개수에 더하고 2를 반환하도록 했다. 이 방법 말고도 자르기 전에, 이..

[Java] 프로그래머스 : 로또의 최고 순위와 최저 순위

문제 https://school.programmers.co.kr/learn/courses/30/lessons/77484?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 당첨된 번호를 index로 사용하여 boolean배열에 true로 표기한다. answer는 등수를 가리키며, 최고 순위는지워진 수가 모두 맞았을 때이고 최저 순위는 지워진 수가 모두 틀렸을 때이므로 최저순위 - (0의 개수)를 하면 최고 순위를 계산할 수 있다. class Solution { public int[] solution(int[] lottos, ..

[Java] 백준 21609번 : 상어 중학교

문제 https://www.acmicpc.net/problem/21609 21609번: 상어 중학교 상어 중학교의 코딩 동아리에서 게임을 만들었다. 이 게임은 크기가 N×N인 격자에서 진행되고, 초기에 격자의 모든 칸에는 블록이 하나씩 들어있고, 블록은 검은색 블록, 무지개 블록, 일반 블록 www.acmicpc.net 풀이 과정 가장 왼쪽, 위쪽에서 출발해서 일반 블럭일 때만 DFS 탐색을 하면, 일반블럭이 무조건 1개 이상인 조건을 만족한다. 탐색 후, (블럭 사이즈가 최대) || (이전 블럭 사이즈와 같고 rainbow블럭의 개수가 같거나 큼)일 때, 가장 큰 블럭 값을 갱신해준다. 가장 큰 블럭은 삭제하면서 -2로 표시한다. import java.io.BufferedReader; import ja..

[Java] 백준 1655번 : 가운데를 말해요

문제 https://www.acmicpc.net/problem/1655 1655번: 가운데를 말해요 첫째 줄에는 백준이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 백준이가 외치는 정수가 차례대로 주어진다. 정수는 -1 www.acmicpc.net 풀이 과정 입력된 수를 최대힙과 최소힙에 나눠 저장해서 중간 값이 최대힙의 top에 있도록 했다. 최대힙은 값을 넣을 때, 음수로 넣어서 최소힙을 활용한 최대힙을 만들었다. 최대힙의 크기 >= 최소힙의 크기로 밸런스를 맞춰서 최대힙.peek()를 출력해주면 된다. 1. mid값보다 크면, 최소힙에 삽입 1-1. 최소힙의 크기 > 최대힙의 크기면, 최대힙.offer(최소힙.po..