[프로그래머스/Lv.2] 오픈채팅방 (Java)
·
✏️/Programmers
오픈채팅방https://school.programmers.co.kr/learn/courses/30/lessons/42888풀이처음 코드`record`를 2번 돌면서 닉네임 갱신, 결과 생성1차 순회: `record``userId` -> 최종 닉네임`Map HM = new HashMap()`결과 개수 계산(`n`)2차 순회: `record``Enter` / `Leave`에 대해 결과 문자열 생성 개선한 코드 상태로 닉네임 관리, `Enter` / `Leave` 로그로 분리해 한 번에 출력1차 순회: `record``userId` -> 최종 닉네임`Map HM = new HashMap()`출력 대상 로그: `userId`, `word``List logs = new ArrayList()`2차 순회: `logs..
[프로그래머스/Lv.1] 신고 결과 받기 (Java)
·
✏️/Programmers
신고 결과 받기https://school.programmers.co.kr/learn/courses/30/lessons/92334풀이id -> index 매핑신고 결과 계산할 때 "muzi"같은 문자열 id를 결과 배열 인덱스로 바로 접근해야 함 -> O(1)X => 매번 id_list를 탐색해야 함Map HM = new HashMap();for (int i = 0; i 신고 관계 정리피신고자 -> 자기를 신고한 사람들 집합 => 1번 신고만 인정피신고자(`to`) X -> 새로운 `HashSet` 생성O -> 기존 `Set` 사용신고자(`from`)을 `Set`에 추가Map> reportedBy = new HashMap();for (String r : report) { String[] str = ..
[프로그래머스/알고리즘 고득점 Kit] 탐욕법(Greedy) - 조이스틱 (Java)
·
✏️/Programmers
조이스틱https://school.programmers.co.kr/learn/courses/30/lessons/42860풀이알파벳 변경처음 알파벳 A에서 위로 가는 횟수 vs 아래로 가는 횟수 -> 더 작은 값for (int i = 0; i 커서 이동문자 길이 n -> 기본 이동(`move`): n - 1중간에 A 없음 -> 그냥 오른쪽으로 커서 이동중간에 A 있음 -> 돌아가는 게 나을 수도 있음ex. JAN오른쪽으로만 이동: 0 -> 1 -> 2 => 2칸뒤로 돌아서 이동: 0 -> 왼쪽 -> 2 => 1칸 오른쪽 갔다가 돌아오기: `i * 2 + (n - next)`오른쪽: i / 되돌아오기: i / 왼쪽으로 끝까지: n - next왼쪽 갔다가 돌아오기: `(n - next) * 2 + i`왼쪽:..
[프로그래머스/알고리즘 고득점 Kit] 탐욕법(Greedy) - 큰 수 만들기 (Java)
·
✏️/Programmers
큰 수 만들기https://school.programmers.co.kr/learn/courses/30/lessons/42883풀이앞자리가 클수록 전체 수가 커짐(`k > 0`) + (스택의 top(`stack.peekLast()`) `stack.pollLast()`: 스택 pop`k--`현재 숫자 pushfor (char n : number.toCharArray()) { while (!stack.isEmpty() && k > 0 && stack.peekLast() 예시number: 1924 / k: 21빈 스택 -> pushstack = [1] / k = 29top(1) pop k = 1빈 스택 -> pushstack = [9] / k = 12top(9) > 2 -> Xpush stack = [9..
[프로그래머스/Lv.2] 숫자 변환하기 (Java)
·
✏️/Programmers
숫자 변환하기 https://school.programmers.co.kr/learn/courses/30/lessons/154538풀이BFS`Queue q = new ArrayDeque()``int[] dist = new int[y + 1]``dist[v]`: v에 도착하기까지의 최소 연산 횟수`Arrays.fill(dist, -1)`: 방문 X로 초기화 가능한 3가지 연산x에 n 더하기: `cur + n`x에 2 곱하기: `cur * 2`x에 3 곱하기: `cur * 3`-> y 넘어가면 의미 X + 방문 안 한 경우(-1)만 탐색if (cur + n 코드import java.util.*;class Solution { public int solution(int x, int y, int n) { ..
[BOJ/Merge Sort] 백준 1517 - 버블 소트 (Java)
·
✏️/BOJ
1517 - 버블 소트https://www.acmicpc.net/problem/1517문제N개의 수로 이뤄진 수열 A[1], A[2], ..., A[N]버블 소트: 서로 인접해 있는 두 수를 바꿔가며 정렬하는 방식ex. 3 2 1 -> 2 3 1 -> 2 1 3 -> 1 2 3입력첫째 줄: N (1 다음 줄: N개의 정수 A[1], A[2], ..., A[N] (0 출력: swap 횟수풀이버블 정렬에서 발생하는 swap 횟수 = 역순 쌍(inverse) 개수 합병 정렬(Merge Sort)배열을 반으로 분할 -> 각 절반을 재귀적으로 정렬 -> 정렬된 두 배열 병합(merge)시간 복잡도: O(N log N) mergeSort(lt, rt)[lt ~ rt] 구간 정렬`lt >= rt`: 원소가 1개 ..
aeongg
빙글빙글 돌아가는 Debug 하루