https://www.acmicpc.net/problem/20058 🐢 설명 하나의 보드에서 부분사각형으로 회전을 하고 모든 회전이 끝나고 나면 각 좌표들에 대해서 인접 노드의 얼음 개수가 3미만인 경우를 찾고, 해당 좌표의 얼음을 1 감소시킨다. 이 후 모든 얼음의 개수를 세고, 가장 큰 얼음덩어리의 면적을 구한다. 이때 각 작은 사각형마다 회전을 하기위해 작은사각형의 크기만큼 x좌표와 y좌표를 이동시켜서 회전을 했다. 🐢코드 //얼음이 있는 칸 3개 또는 그 이상과 인접해있지 않은 칸은 얼음의 양이 1 줄어든다 public class 마법사상어와파이어스톰_20058 { static int N, Q, L; static int[] dy = {-1, 1, 0, 0}; static int[] dx = {0,..
https://www.acmicpc.net/problem/20057 🐢 설명 모래가 정사각형 공간에 존재한다. 토네이도는 반시계 방향으로 정가운데에서 불기 시작한다. 이때 방향은 , ㅗ 순서이다. 바람이 불면 해당 방향 바로 앞 좌표에 존재하는 모래가 이동한다. (3, 3)에서 바람이 왼쪽으로 불면, (3, 2)의 모래가 이동한다. 모래가 이동하면 문제에서 나오는데로 모래가 먼저 다 퍼진다. 이때 0이하의 모래는 무시한다. 기존 모래 - 실제로 퍼진 모래만이 a부분으로 이동한다. 이때 기존 모래는 0이 된다. 이동거리가 m일 때 총 2회씩 이동하고 m의 길이가 1 증가한다. 또한 m이 총 공간의 길이 - 1에 도달할 경우 3회 이동을 하고 종료된다. 토네이도가 왼쪽으로 이동할 때 모래가 이동하는 경우와 ..
https://programmers.co.kr/learn/courses/30/lessons/59042 🐢 설명 목적 쿼리 : 입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문 1) 동물의 id와 이름을 조회 , id순으로 정렬 2) 입양을 간 기록은 있음 3) 보호소에 들어온 기록은 없음 🐢코드 SELECT animal_id, name from animal_outs where animal_id not in ( select distinct animal_id from animal_ins ) order by animal_id; 🐢 마무리
https://programmers.co.kr/learn/courses/30/lessons/77487 🐢 설명 헤비유저의 게시글을 id기준으로 정렬하여 게시글을 조회하는 쿼리를 만들면 된다. 헤비유저 : 게시글을 2개 이상 등록한 host 쿼리문을 짤때는 잘 분리해서 보면된다. places테이블에서 게시글을 조회한다. id를 기준으로 정렬한다. 헤비유저가 등록한 게시글만 1) 먼저 1번 쿼리를 짜보자. select * from places; 2) 여기서 id를 기준으로 정렬해보자. select * from places order by id asc; -- 여기서 헤비유저의 글만 조회해야 된다. + where 호스트 in (헤비유저) 3) 헤비 유저의 게시글만 조회하는데, 먼저 헤비 유저를 구하자. -- h..
https://programmers.co.kr/learn/courses/30/lessons/77486 🐢 설명 HashMap을 이용하여 풀었다. 자신의 상위 보스를 추적해서 이익의 10%를 분배해줘야 하면서 나머지 90%는 자신의 수익을 챙기는 구조이다. 따라서 모든 판매자들에 대해서 부모를 등록시키고 돈을 벌고 수익을 일부분을 부모에게 전달시켜 준다. 이때 10원 미만은 절삭해야하고, root에 도달하면 따로 돈을 적금안해줘도 되므로 return 한다. makeTree()에서 myBoss에는 자신 - 자신의 부모 를 등록하고, myCount에는 자신 - 자신의 계좌를 등록한다. selling()에서 수익을 벌면 90%는 자신에게 더하고, 10%는 상위 노드에게 분배한다. distribute()에서 10..
https://programmers.co.kr/learn/courses/30/lessons/77485 🐢 설명 2차원 배열 돌리기 문제이다. 쿼리에는 왼쪽위 좌표와 오른쪽 아래 좌표가 주어지고, 해당 쿼리 배열을 담은 queries 배열이 주어진다. 이때 하나의 쿼리문에 대해서 시계방향으로 1만큼 씩 돌리고 이동한 값들 중에서 최소값을 구한 후 반환하도록 하면 된다. 즉, for (쿼리 : 모든 쿼리) : 쿼리좌표 기준으로 돌림을 하면된다. 이때 배열을 돌리기 위해서 임시 배열을 하나 만들어줘야 하는데 2차원 배열을 깊은 복사를 하기 위해 for문으로 clone을 해준다. clone()함수는 1차원 배열을 깊은 복사하기 위한 함수로 2차원 배열은 row마다 돌면서 해줘야 깊은복사가 된다. 바로 하면 얕은..
https://programmers.co.kr/learn/courses/30/lessons/77484?language=java 🐢 설명 문제는 길지만 내용은 정말 간단하다. 내가 뽑은 6개의 숫자와 1등 숫자 6개를 비교하는데, 나의 숫자가 0인 경우 전부 틀리거나 전부 맞을 때의 경우를 구하면 된다. 숫자도 6개뿐이으로 2중 for문으로 모든 숫자를 비교해서 1등 번호에 존재하는 숫자의 개수를 구하고, 나의 숫자에서 0의 개수를 구한다. 최소 등수는 전자에서 구한 1등번호와 같은 숫자의 개수로 계산하고, 최대 등수는 전자에서 더한 개수 + 0의 개수의 값으로 계산한다. 시간복잡도 : O(n^2) 🐢코드 import java.util.*; class Solution { public int[] soluti..
https://www.acmicpc.net/problem/20665 🐢 설명 09:00시부터 21:00시 까지의 독서실 시간을 채워서 원하는 자리에 앉을 수 있는 총 시간을 구하면 된다. 먼저 시간, 분, 총 좌석으로 이뤄진 3차원 배열을 만들고 손님이 올 때 해당 손님의 시작 시간부터 종료 시간을 체크한다. 이때 시작시간을 가지고 앉을 수 있는 자리를 찾는다. 자리는 1번을 가장 선호하고, 이후 부턴 다른 사람과의 거리가 가장 멀고 그중에서 앞자리수인 자리에 앉게 하면 된다. 따라서 1~N개의 자리번호에 대해서 자신의 자리외에 다른 자리의 손님들과의 거리중 가장 짧은 값을 구하고, 해당 각 좌석 번호별 손님까지의 최소 길이의 최대값을 갖는 자리 번호를 반환하도록 한다. 예들들어 1~5번 좌석에 대해서 ..
https://www.acmicpc.net/problem/3114 🐢 설명 누적합 문제이다. 사과 나라는 트랙터가 지나는 아래쪽의 사과를 얻고 바나나 나라는 트랙터가 지나는 위쪽의 바나나를 얻는다. 이때 트랙터가 지나는 길의 과일은 아무도 얻지 못한다. 따라서 트랙터가 지나는 길을 기준으로 사과나라에서 얻을 수 있는 사과 갯수와 바나나 나라에서 얻을 수 있는 바나나 갯수를 별도로 확인해주는 것이 필요하다. 예제에서 주어진 2차원 맵을 생각해보자 현재 지도에는 바나나와 사과가 존재하고 트랙터가 어디로 갔냐에 따라 얻을수 있는 사과와 바나나의 개수는 달라진다. 이를 그림으로 나타내보면 아래와 같다. 트랙터가 (0, 0)에 위치한다면 사과 나라는 0열에서 0행을 제외한 아래 1~3행 중 사과 3 + 2개를 얻..
https://programmers.co.kr/learn/courses/30/lessons/64063 🐢 설명 문제는 매우 직관적이다. 원하는 방번호를 요청하고 없으면 요청한 방 번호보다 큰 번호 중 가능한 첫번째 방번호를 반환하고, 있으면 바로 반환하면 되는 문제이다. 그런데 요청 가능한 방번호의 범위가 무려 10^12승으로 1조이다. 전세계 방을 다합쳐도 안될것같은 방의 개수이지만 요구사항을 잘 지켜보자. 문제를 풀 수 있는 힌트는 방 번호는 최대 1조까지 있지만, 요청하는 방 번호의 개수는 20만개로 제한적이다. 따라서 일반적인 배열 대신 Map 자료구조를 이용한 유니온-파인드를 통해 요구 방마다 (자신의 방 번호 - 부모 방 번호) 구조를 갖도록 하면 메모리 걱정없이 풀 수 있다. 먼저 모든 Ro..
https://www.acmicpc.net/problem/10800 🐢 설명 공의 개수 : 최대 20만개 공의 색 : 최대 20만개 공의 크기 : 최대 2000 위 제한사항을 유념하도록하자. 색이 20만개 이므로 색별 크기 배열을 만들경우 20만 * 2000으로 4억개의 int가 만들어진다. 이러면 당연히 메모리 초과가 발생하니 1차원배열에 O(N^2) 미만으로 풀 수 있어야한다. 먼저 하나의 볼에 대해서 자신보다 작고, 색이 다른 볼만 이길 수 있다했다. 따라서 먼저 모든 볼을 크기순으로 정렬을하고, 각 볼에 대해서 (현 볼보다 가벼운 모든 볼의 무게 합) - (현재 볼 색깔의 무게 합) 을 하면 현재 볼이 이긴 모든 볼의 무게를 구할 수 있다. 볼을 뽑고 현재 볼보다 가벼우면 계속 더하는데, 이때 색..
https://programmers.co.kr/learn/courses/30/lessons/64064 🐢 설명 총 사용자의 id N개 중에서 id의 부분 문자가 *처리된 R개의 ban Id를 알고 있을 때, 몇개의 id 조합이 나올 수 있는지 묻는 문제이다. 조합 : N개 중에서 순서에 상관없이 R개를 뽑을 수 있는 경우의 수 id가 ABC, DEF 가 있을 때, [ABC, DEF] 의 경우나 [DEF, ABC]의 경우는 같다는 것이다. 따라서 nCr로 조합을 모두 확인하면서 [*] 처리에 대해 포함되는 아이디인지 확인하면 된다. list에 id를 순서대로 넣는다. id 담은 개수가 밴 아이디 개수와 같다면 해당 아이디들이 밴 아이디와 같은지 유효성 검사를 한다. (func : checkBanId) 담은..
- Total
- Today
- Yesterday