알고리즘
-
수도코드 1. 1초마다 documents에서 printlist로 값을 추가, 이동, 출력 2. buffersize만큼 옆으로 이동 3. 옆으로 이동할 때 docunets의 다른 요소와 이미 추가된 요소의 합이 capacities를 넘지 않으면 추가 4. 넘으면 이동만 5. documents와 printlist가 모두 비면 시간 리턴 import java.util.*; public class Solution { public int queuePrinter(int bufferSize, int capacities, int[] documents) { int second = 0; Queue printlist = new LinkedList(); for(int i = 0; i < bufferSize; i++) { pr..
[알고리즘 풀이] 프린터수도코드 1. 1초마다 documents에서 printlist로 값을 추가, 이동, 출력 2. buffersize만큼 옆으로 이동 3. 옆으로 이동할 때 docunets의 다른 요소와 이미 추가된 요소의 합이 capacities를 넘지 않으면 추가 4. 넘으면 이동만 5. documents와 printlist가 모두 비면 시간 리턴 import java.util.*; public class Solution { public int queuePrinter(int bufferSize, int capacities, int[] documents) { int second = 0; Queue printlist = new LinkedList(); for(int i = 0; i < bufferSize; i++) { pr..
2023.05.04 -
수도 코드 1. 배열을 담을 queue와 첫사람, result, count를 int 타입으로 선언 2. queue가 빌 때까지 queue에서 숫자를 하나씩 꺼내서 다음 숫자와 비교 2.1. 이전 숫자가 다음 숫자보다 작으면 종료 2.2. 이전 숫자가 다음 숫자보다 크면 첫사람에 다음사람을 할당하고 count 1 증가하고 result에 count와 result중 큰 값을 할당 3. 위를 반복해서 가장 큰 result를 리턴 import java.util.*; public class Solution { public int paveBox(Integer[] boxes) { Queue queue = new LinkedList(Arrays.asList(boxes)); //첫 사람 선언, 할당 Integer firs..
[알고리즘 풀이] 박스 포장수도 코드 1. 배열을 담을 queue와 첫사람, result, count를 int 타입으로 선언 2. queue가 빌 때까지 queue에서 숫자를 하나씩 꺼내서 다음 숫자와 비교 2.1. 이전 숫자가 다음 숫자보다 작으면 종료 2.2. 이전 숫자가 다음 숫자보다 크면 첫사람에 다음사람을 할당하고 count 1 증가하고 result에 count와 result중 큰 값을 할당 3. 위를 반복해서 가장 큰 result를 리턴 import java.util.*; public class Solution { public int paveBox(Integer[] boxes) { Queue queue = new LinkedList(Arrays.asList(boxes)); //첫 사람 선언, 할당 Integer firs..
2023.05.02 -
수도 코드 1. 영어단어를 숫자로 바꾸는 HashMap 필요 2. 반복문을 통해 HashMap을 순회하면서 영어를 숫자로 바꾸기 3. 바뀐 숫자의 타입을 String에서 Int로 파싱하기 import java.util.*; class Solution { public int solution(String s) { // 영어단어를 숫자로 변경하기 위한 맵 Map engToNum = new HashMap(); engToNum.put("zero", 0); engToNum.put("one", 1); engToNum.put("two", 2); engToNum.put("three", 3); engToNum.put("four", 4); engToNum.put("five", 5); engToNum.put("six", 6)..
[알고리즘 풀이] 숫자 문자열과 영단어수도 코드 1. 영어단어를 숫자로 바꾸는 HashMap 필요 2. 반복문을 통해 HashMap을 순회하면서 영어를 숫자로 바꾸기 3. 바뀐 숫자의 타입을 String에서 Int로 파싱하기 import java.util.*; class Solution { public int solution(String s) { // 영어단어를 숫자로 변경하기 위한 맵 Map engToNum = new HashMap(); engToNum.put("zero", 0); engToNum.put("one", 1); engToNum.put("two", 2); engToNum.put("three", 3); engToNum.put("four", 4); engToNum.put("five", 5); engToNum.put("six", 6)..
2023.04.25 -
지도문제 푸는 방법 1. 항상 arr[row+1][col+1] 로 선언 2. 방향 저장하기 (HashMap을 사용하지 않으면 그냥 배열을 사용) // 좌표 이동 방향을 저장하는 해시맵 HashMap DIR = new HashMap() {{ put('N', new int[-1, 0]); put('S', new int[1, 0]); put('E', new int[0, 1]); put('W', new int[0, -1]); }} 풀이 : import java.util.HashMap; class Solution { public int[] solution(String[] park, String[] routes) { // 로봇의 이동 방향을 저장하는 해시맵 HashMap DIR = new HashMap() {{ p..
[알고리즘 풀이] 공원 산책지도문제 푸는 방법 1. 항상 arr[row+1][col+1] 로 선언 2. 방향 저장하기 (HashMap을 사용하지 않으면 그냥 배열을 사용) // 좌표 이동 방향을 저장하는 해시맵 HashMap DIR = new HashMap() {{ put('N', new int[-1, 0]); put('S', new int[1, 0]); put('E', new int[0, 1]); put('W', new int[0, -1]); }} 풀이 : import java.util.HashMap; class Solution { public int[] solution(String[] park, String[] routes) { // 로봇의 이동 방향을 저장하는 해시맵 HashMap DIR = new HashMap() {{ p..
2023.04.24 -
수도 코드 모든 사용자 정보가 id_list에 존재 0. 사용자별로 신고당한 횟수를 기록하는 자료 필요 (초기화): reported[user] = 0 1. report를 순회하면서 아래 작업을 수행 1.1 신고자와 신고당한 자를 구분 : src, dst(string.split(" ")) 1.2 각 사용자별로 신고한 사람을 기록 : reporter[src] = Set("dst1", "dst2") 1.3 각 사용자별로 신고당한 횟수를 기록 : reported[dst] = reported[dst] + 1 1.3.1 이 때 동일한 사람에게 신고한 경우 횟수를 업데이트 하지 않는다 2. reported를 순회하면서 k이상인 사람을 filter한다. banned 3. reporter를 순회하면서 banned에 포함..
[알고리즘 풀이] 신고 결과 받기수도 코드 모든 사용자 정보가 id_list에 존재 0. 사용자별로 신고당한 횟수를 기록하는 자료 필요 (초기화): reported[user] = 0 1. report를 순회하면서 아래 작업을 수행 1.1 신고자와 신고당한 자를 구분 : src, dst(string.split(" ")) 1.2 각 사용자별로 신고한 사람을 기록 : reporter[src] = Set("dst1", "dst2") 1.3 각 사용자별로 신고당한 횟수를 기록 : reported[dst] = reported[dst] + 1 1.3.1 이 때 동일한 사람에게 신고한 경우 횟수를 업데이트 하지 않는다 2. reported를 순회하면서 k이상인 사람을 filter한다. banned 3. reporter를 순회하면서 banned에 포함..
2023.04.24 -
알고리즘 코딩 테스트를 대비해서 자잘자잘하지만 자주 쓰이는 코드들을 기억이 나지 않을 때마다 계속 검색해보기 힘들어서 모아보려고 한다. 공부를 하면서 유용한 것들이 있을 때마다 추가를 하려고 한다. 1. 배열 복사 int[] newDocuments = Arrays.copyOfRange(documents, 1, documents.length); Arrays.copyOfRange(원본 배열, 원본 배열의 첫 인덱스, 원본 배열의 끝 인덱스) 2. queue, 배열 등 요소 전체 합 .stream().reduce(0, Integer::sum) reduce는 누적 연산을 뜻함 3. 2차원 배열을 탐색할 때 요소의 상하좌우를 확인할 때 쓰는 초기화 int[] dx = {-1, 0, 1, 0}; int[] dy =..
[알고리즘] 자주 쓰이는 코드 모음알고리즘 코딩 테스트를 대비해서 자잘자잘하지만 자주 쓰이는 코드들을 기억이 나지 않을 때마다 계속 검색해보기 힘들어서 모아보려고 한다. 공부를 하면서 유용한 것들이 있을 때마다 추가를 하려고 한다. 1. 배열 복사 int[] newDocuments = Arrays.copyOfRange(documents, 1, documents.length); Arrays.copyOfRange(원본 배열, 원본 배열의 첫 인덱스, 원본 배열의 끝 인덱스) 2. queue, 배열 등 요소 전체 합 .stream().reduce(0, Integer::sum) reduce는 누적 연산을 뜻함 3. 2차원 배열을 탐색할 때 요소의 상하좌우를 확인할 때 쓰는 초기화 int[] dx = {-1, 0, 1, 0}; int[] dy =..
2022.09.01 -
그래프를 탐색하는 방법에는 크게 깊이 우선 탐색(DFS)과 너비 우선 탐색(BFS)이 있다. 여기서 그래프란, 정점(node)과 그 정점을 연결하는 간선(edge)으로 이루어진 자료구조의 일종을 말하며, 그래프를 탐색한다는 것은 하나의 정점으로부터 시작하여 차례대로 모든 정점들을 한 번씩 방문하는 것을 말한다. 깊이 우선 탐색 (DFS, Depth-First Search) : 최대한 깊이 내려간 뒤, 더이상 깊이 갈 곳이 없을 경우 옆으로 이동 깊이 우선 탐색의 개념 루트 노드(혹은 다른 임의의 노드)에서 시작해서 다음 분기(branch)로 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방식을 말한다. 예를 들어, 미로찾기를 할 때 최대한 한 방향으로 갈 수 있을 때까지 쭉 가다가 더 이상 갈 수 없게 되..
[알고리즘] 깊이 우선 탐색(DFS)과 너비 우선 탐색(BFS)그래프를 탐색하는 방법에는 크게 깊이 우선 탐색(DFS)과 너비 우선 탐색(BFS)이 있다. 여기서 그래프란, 정점(node)과 그 정점을 연결하는 간선(edge)으로 이루어진 자료구조의 일종을 말하며, 그래프를 탐색한다는 것은 하나의 정점으로부터 시작하여 차례대로 모든 정점들을 한 번씩 방문하는 것을 말한다. 깊이 우선 탐색 (DFS, Depth-First Search) : 최대한 깊이 내려간 뒤, 더이상 깊이 갈 곳이 없을 경우 옆으로 이동 깊이 우선 탐색의 개념 루트 노드(혹은 다른 임의의 노드)에서 시작해서 다음 분기(branch)로 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방식을 말한다. 예를 들어, 미로찾기를 할 때 최대한 한 방향으로 갈 수 있을 때까지 쭉 가다가 더 이상 갈 수 없게 되..
2020.12.20