일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 59409
- softeer
- 해결
- 수료
- 146355
- MySQL
- 오블완
- 165672
- 설명
- 소프티어
- 백준
- 퍼즐 조각 채우기
- 티스토리챌린지
- 후기
- 배열 돌리기 5
- 싸피
- 14942
- 핵심
- 10기
- 59412
- 진료과별 총 예약 횟수 출력하기
- PCCP
- 142085
- java
- 프로그래머스
- 정기 코딩 인증평가
- SQL
- 조건에 부합하는 중고거래 상태 구하기
- SSAFY
- 132202
- Today
- Total
목록알고리즘 (62)
개발 쥬스
https://school.programmers.co.kr/learn/courses/30/lessons/42583 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr🔍 고찰 과정트럭이 다리를 건너는 중일 때는 총 bridge_length의 시간이 걸립니다. 문제에서 대기트럭이 주어진 순서대로 이동할 때 걸리는 최소 시간을 계산하는 것이므로 Java의 Queue 자료구조를 활용하여 걸리는 시간을 계산하였습니다. 큐를 활용하여 시간 계산을 한 과정은 다음과 같습니다.1️⃣ 트럭의 무게 정보를 담을 정수형 큐를 만들어준다.2️⃣ 큐 자료구조에 처음에는 트럭이 없으므로..
🔗 문제 링크: https://www.acmicpc.net/problem/20166🔍 고찰 과정dfs를 활용하여 신이 좋아하는 문자열에 도달하는 경우의 수를 구하면 될 것 같다는 생각이 들었습니다. 하지만 위 문제는 다음과 같은 변수가 존재했습니다. ❗️타일을 지나갔던 곳은 다시 지나갈 수 있음❗️타일의 양끝 밑 대각선 양 끝을 넘어가는 경우는 다시 처음으로 돌아가거나 마지막으로 돌아갈 수 있음❗️방문한 순서가 다른 경우는 서로 다른 경우로 취급함 위 변수를 토대로 최악의 경우에서 나올 수 있는 연산량을 계산해보면 다음과 같습니다.🎲 타일의 최대 크기 (N과 M 각각 최대 10): 10 x 10 = 100🎲 주어지는 신이 좋아하는 문자열의 최대 개수 k = 1000🎲 신이 좋아하는 문자열의 최대..
🔗 문제 링크: https://www.acmicpc.net/problem/3649🔍 해결 과정결론적으로 이진탐색 방법을 활용하여 문제를 해결하였습니다. 처음에는 나노미터의 값을 인덱스로 받고 나노미터의 값이 존재하는지의 여부를 나타내는 배열을 활용하여 문제를 해결하려고 하였으나 문제에서 x의 최댓값은 20이므로 나노미터의 최댓값은 2억이 되어 Java에서 정수형 변수의 크기가 4 byte라는 점을 고려하면 762.94MB가 되어 메모리의 최댓값인 256MB를 훌쩍 넘깁니다. 그래서 다른 방법을 생각한 결과가 이진탐색이었습니다. 이진탐색의 방법을 활용하면 목표로 하는 x의 값이 처음 일치했을 때 곧바로 |l2 - l1|의 값이 최대인 지점을 바로 구할 수가 있으며 또한 시간 복잡도 O(log n)에 ..
🔗 문제 링크: https://www.acmicpc.net/problem/4358🔍 고찰 과정자료구조를 활용하여 특정 종이 입력한 빈도수를 저장하고 비율을 출력하는 방식을 생각했습니다.사용한 자료구조는 TreeMap 형태의 자료구조를 사용했는데 그 이유는 key 값을 사전순으로 정렬을 해야 하는데 TreeMap은 문자열을 key값으로 입력 시 key 값을 사전순으로 정렬을 해주는 기능을 가지고 있기 때문입니다. 참고로 Java에서 TreeMap 형태의 자료구조는 Red-Black Tree라는 자료구조를 사용하여 키를 정렬하는데 자가 균형 이진 탐색 트리의 일종으로 키의 삽입, 삭제, 탐색이 모두 O(log n) 시간 복잡도를 가지고 있습니다.✏️ 코드import java.io.*;import java..
🔗 문제 링크: https://www.acmicpc.net/problem/1189🔍 해결 과정왼쪽 아래에서 오른쪽 위까지의 다양한 경로 중 k번 이동한 경로와 일치한 경우의 수를 구하는 문제이고, R과 C의 최댓값이 5이므로 dfs(Depth-First Search) 방식을 활용하여 오른쪽 위에 도달했을 때 k번 이동했는지의 경우를 확인하고 일치하면 경우를 세어주는 과정으로 코드를 구현하였습니다. dfs를 활용했을 때 O(R x C) 의 시간복잡도를 가지므로 제한 시간 안에 프로그램을 실행할 수가 있습니다. ✏️ 코드import java.io.*;import java.util.StringTokenizer;public class Main { private static final char BLOCK..
https://school.programmers.co.kr/learn/courses/30/lessons/42587 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 고찰 과정문제를 봤을 때 단순하게 우선순위 큐를 활용하는 방법도 있겠지만 추가적인 확인 작업도 필요했기에 deque를 활용하여 문제를 해결했습니다.예를 들어서 프로세스 [A, B, C, D, E, F]가 존재하고 우선순위가 [1, 1, 9, 1, 1, 1]이 있을 때 A의 순서 번호를 구한다고 가정해봅시다.당연히 C가 먼저 실행되지만 그 다음 실행되어야 하는 순서는 A, B, D, E, F 순이 아닌..