알고리즘/구현 6

[백준 19583] 싸이버 개강 총회 -구현, 문자열, HashSet

https://www.acmicpc.net/problem/19583 19583번: 싸이버개강총회 첫번째 줄에는 개강총회를 시작한 시간 S, 개강총회를 끝낸 시간 E, 개강총회 스트리밍을 끝낸 시간 Q가 주어진다. (00:00 ≤ S < E < Q ≤ 23:59) 각 시간은 HH:MM의 형식으로 주어진다. 두번째 줄부터는 www.acmicpc.net [설계] 1. (00:00 ~ S) in HashSet에 입장체크를 한다. 2. (E ~ Q) out HashSet에 퇴장체크를 한다. 3. 입장한 사람들에 대해 퇴장했는지 확인한다. 시간복잡도: O(채팅기록) = O(100,000) ※주의: (E ~ Q)입력에 대해 입장체크 in의 존재여부로 바로 확인하면 안된다. (채팅 중복이 있기 때문) [알게된 내용] ..

알고리즘/구현 2023.02.07

[백준 10972, 10973] 다음순열, 이전순열 (Java)

문제 10972 다음순열 https://www.acmicpc.net/problem/10972 10972번: 다음 순열 첫째 줄에 입력으로 주어진 순열의 다음에 오는 순열을 출력한다. 만약, 사전순으로 마지막에 오는 순열인 경우에는 -1을 출력한다. www.acmicpc.net 설계 설계1: dfs 완전탐색 순열을 구하는 문제이니 dfs 완전탐색으로 접근하면 되지 않을까? 하지만, dfs 완전탐색은 모든 경우의 수에 대해 탐색하는 것이므로 Worst Case에 대해 고려해야 한다. Worst Case: N=10,000 즉, 10000! 경우의 수에 대해 탐색해야하므로 "시간초과" 설계2: 순열의 특성을 고려한 구현으로 접근 주어진 정보는 순열이다. 따라서, 주어진 순열을 적절히 조작하면 다음 순열을 만들 ..

알고리즘/구현 2022.07.17

프로그래머스 - 문자열 압축

풀이 코드 import java.util.*; class Solution { public int solution(String s) { StringBuilder sb = new StringBuilder(); int count = 0; //step0: 압축길이 설정 for (int zip=1; zip 1) sb.append(count+target); //중복이 없다면, 타겟만 기록 else sb.append(target); /**다음타겟을 만들수 없으면 나머지 문자열에 대해 기록해야함 하지만, 로직상 step1의 for문이 조건식에의해 스킵되기 때문에 step1의 for문으로 들어가기 전에 nextTargetIdx에 대해 조사 후 조건식을 넘어버리면 즉, 다음타겟생성이 불가하면 나머지 문자열에 대해 기록해줘..

알고리즘/구현 2022.06.30

프로그래머스 - 키패드 누르기 [자바]

핵심: 문제의 목표를 파악 : 각 버튼을 어느 손으로 눌렀는지 알아야 한다. 목표달성을 위한 세부목표를 파악 : 1) 현재 더 가까운 손 판별을 위해 거리를 알아야 하고 2) 거리를 알려면 좌표를 알아야 한다. 3) 좌표를 알려면 적절한 방법으로 숫자와 좌표를 매핑해야 한다. 코드 class Solution { public String solution(int[] numbers, String hand) { StringBuilder sb = new StringBuilder(); int leftNum = 10; int rightNum = 12; for (int nextNum: numbers) { if (nextNum==0) nextNum = 11; if (nextNum==1 || nextNum==4 || ne..

알고리즘/구현 2022.06.24

프로그래머스[자바] - 두 개 뽑아서 더하기

2 + 1 = 1 +2이다. (2,1) = (1,2)이다. 즉, 조합을 찾는 문제이다. (numbers가 같은 숫자도 존재할 수 있으니 서로다른 n개중 r개를 뽑는 조합과는 완전히 같다고 할 순 없지만 같은 방식으로 접근..) 조합문제 1) dfs 탐색 2) 구현 둘 중에 무엇을 선택할지 결정해야하니, Input Size부터 확인해보자. numbers의 최대길이는 100이므로 Worst Case: 100개 중 2개를 뽑는 경우 = 100C2 = 4950 ,, Input Size도 작고 탐색수도 많은 편이 아니니 dfs탐색으로 진행해도 무리가 없어보인다. DFS 탐색 DFS 탐색을 하기 위해선 State Space Tree를 작성하는 것이 우선이다. (알고리즘의 흐름을 파악하기 위해) SST 설계 visi..

알고리즘/구현 2022.06.21

프로그래머스[자바] - 신고결과받기

핵심정리 1. hashMap 자료구조 사용 (목표를 구하는데 용이하기 때문) 그 것을 map이라고 하자. 2. map을 "reporter(신고자)" , "reported(피신고자)" 순서가 아닌, "reported(피신고자)" , "reporter(신고자)" 순서로 정의 처음과 같은 형태로 정의하면 각 reported가 k번이상 신고받았는지 테이블을 순회하며 확인해야함. 두번째순서로 정의하면 단순히, reporter의 숫자만 count하면 된다. 3. hashMap 자료구조 사용 각 ID별 idx를 지정해줘야 함 예를들어 k=2일때, reported A에 대한 reporter [B, C]를 조사중이라고 해보자. reporter의 수가 2이상이기 때문에 각 B, C의 신고처리 받는메일 횟수를 1씩 증가시켜..

알고리즘/구현 2022.06.21