Java
-
백준 7569, 2573 - JavaJava/코딩테스트 2023. 5. 26. 17:18
백준 7569 토마토 - 기존 BFS 방식에서 z축이 새로 생겼다고 보면 된다. 3차원 배열에 토마토 저장, 원래 BFS쓸 때 정의하는 x,y축 이동방향에 추가로 z축 이동방향(위 아래) 까지 정의해준다. - 남은 안익은 토마토 개수 left 정의해주기. 처음부터 left가 0일 수도 있다. bfs 들어가기전에 이거 먼저 걸러내기 - 익은 토마토 위치들부터 큐에 넣어준다. - 따로 방문배열 만들지 않고 3차원 배열에 저장된 값이 0이면 아직 안 방문한 안익은 토마토라는 뜻이므로 이때만 큐에 넣어준다. 3차원 배열에 익은 시점을 저장하며 업데이트 - 큐를 다 돌았는데도 안 익은게 남았다면 -1, 다 익었다면 3차원 배열을 탐색하여 max값 찾은 후 -1을 해서 정답 출력. (1초부터 시작했기 때문에!) i..
-
[ SWEA ] 1954Java/코딩테스트 2023. 5. 19. 18:19
달팽이 숫자 문제 한 방향으로 쭉 -> 가고 더이상 못가면 방향을 전환하는 방법으로 푼다. isValid() 함수로 검사 + 해당 칸의 값이 0인지 확인 -> 아닐 경우 방향을 전환 이 때 isValid로 먼저 검사해야한다. map[x+dirX[dir]][y+dirY[dir]]를 먼저 조건의 앞에 넣어두면 벽 벗어나는 칸일 경우 바로 ArrayOutOfBound 뜨기 때문. 각 칸에는 1~n*n의 숫자를 채워넣기. import java.util.*; public class Solution { static int[] dirX = { 0, 1, 0, -1 }; static int[] dirY = { 1, 0, -1, 0 }; public static void main(String[] args) { Scann..
-
[ SWEA ] 1204, 1206, 9611Java/코딩테스트 2023. 5. 17. 17:14
1204 : 1000명의 학생들의 점수를 보고 가장 많이 등장한 점수 꺼내기 -> HashMap 사용해서 풀었다. 학생의 점수 + 빈도 수를 key, value 값으로 넣어두기 / map은 같은 key값이 들어오면 나중에 들어온 value로 덮어씌운다. 기존에 있던 빈도 수 scores.get() + 1해서 빈도수 + 1 이때 Map을 정렬해야 하는데, 문제 조건은 2가지가 있다. 1. 가장 많이 등장한 점수 2. 빈도수가 같은 점수가 있을 경우, 더 높은쪽을 선택. Map 자료구조에서 map.entrySet() : map의 모든 Key, Value 꺼낸다. ArrayList로 꺼내도 되고 LinkedList로 꺼내도 된다. 돌려보니 ArrayList가 메모리를 더 쓰고 시간을 덜 쓰는 것 같다. Lin..
-
HackerRank - PriorityQueueJava/코딩테스트 2023. 5. 11. 17:00
https://www.hackerrank.com/challenges/java-priority-queue/problem?isFullScreen=true Java Priority Queue | HackerRank Leran about Priority Queues in Java www.hackerrank.com 해당 문제에서는 Student 클래스를 PriorityQueue에 넣기 위해 Student 클래스에서 compareTo(Student o)를 구현하는 것이 관건이었던것 같다. cgpa(내림차순) -> name(알파벳 순) -> id(오름차순) 순으로 정렬하기. - cgpa 가 double 형이므로 리턴시 ?연산자로 정수 리턴해주기. 내림차순이므로 o.cgpa - this.cgpa > 0 ? 1 : -1..
-
프로그래머스 여행경로 JavaJava/코딩테스트 2023. 5. 4. 17:04
🍭 필요한 로직 모든 티켓을 다 사용해야 한다 -> DFS 갈 수 있는 경로가 여러가지라면 알파벳 순으로 -> 우선순위 큐에 넣기(자동으로 정렬이 된다) / 백트래킹으로 가능한 경우의 수 탐색 티켓을 다 사용했다면 경로를 기록하기 -> 문자열 형태로 경로 저장해놨다가 꺼내는 방식을 씀 -> String path에 공백 간격을 두고 저장, 나중에 queue.poll().split(" ")로 answer 배열에 저장하면 된다. -> 우선순위 큐에서 알아서 알파벳 순서가 가장 빠른걸로 정렬해준다 🍭코드 import java.util.*; class Solution { public PriorityQueue queue; public boolean[] visited; public String[] solution(S..
-
프로그래머스 디스크 컨트롤러 - Java (feat 우선순위 큐)Java/코딩테스트 2023. 4. 27. 02:41
정리하는 김에 조금씩 공부했던 문제들 정리... 🐟우선순위 큐 - 단순 먼저들어오는 애가 먼저 나가는게 아님. 우선순위따라 자동 정렬된다. - 디폴트는 오름차순 정렬 - 정렬 기준을 커스텀 만약 아래 처럼 입력이 들어온다고 하자. queue.add(new Node("나몰빼미", 6)); queue.add(new Node("염버니", 8)); queue.add(new Node("팽도리", 4)); queue.add(new Node("피카츄", 1)); 결과는 이렇게 내림차순으로 출력하고 싶다 염버니 8 나몰빼미 6 팽도리 4 피카츄 1 방법 1 PriorityQueue queue = new PriorityQueue((Node O1, Node O2) -> O2.size - O1.size); 방법 2 (자체 ..
-
프로그래머스 DP 등굣길 JavaJava/코딩테스트 2023. 4. 27. 01:14
계속 몇 가지 테스트 케이스만 틀렸었어서 열받아서 고치고 질문 확인하고 구글링하다가 푼 문제... https://school.programmers.co.kr/learn/courses/30/lessons/42898 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr - 기본적으로 맨 위 가로줄, 맨 왼쪽 세로줄을 다 1로 채워주고 웅덩이를 -1 처리해서 계산했었다. - 한 좌표의 값을 구하는 것은 해당좌표 왼쪽과 위쪽을 기준으로 합쳐서 계산하는데, 왼쪽과 위 모두 웅덩이면 못가는 걸로 처리.. - 한쪽만 웅덩이면 Math.max로 그대로 값을 가져왔었다. -> ..
-
프로그래머스 Hash 문제풀이 - JavaJava/코딩테스트 2023. 4. 26. 22:45
🍡 Hash - 임의의 데이터를 고정된 크기의 대표값으로 변환해서 저장하는 것, 데이터를 해시함수(어떤 연산) 통해 해시값을 얻어냄. - 해시함수를 어떻게 정의하는지에 따라 다른 데이터여도 하나의 해시값이 될 수도 있음(해시 충돌) - 객체는 기본적으로 할당된 주소값을 이용하여 해시 값 생성 - 해시 테이블 : 해시 값을 사용하여 이에 대응하는 원본 데이터를 찾을 수 있게 해주는 자료구조로, 역함수는 존재하지 않는다 (해시는 단방향 변환, 충돌을 허용하기 때문에 역함수 존재 x) - 해시 값으로 원본 데이터에 바로 접근이 가능, 따라서 빠른 시간에 데이터 검색, 삽입, 삭제가 가능하다. 🍡 HashSet - 중복을 허용하지 않는 집합 - 데이터 순서 없음 - add : 데이터 삽입 - contains :..