처음엔 무작정 로직을 그대로 구현하려고 마음을 먹었다. 복잡해 보이는 문제일수록 오히려 한번 데이는 것이 좀 더 효율적인 방법을 빠르게 찾는 방법인 경우도 때때로 있었으니...그러나 제한 사항을 두번, 세번 보다가 문득, 이 문제는 Comparable이나 Comparator을 사용하지 않으면 진짜 엄청난 노가다 문제가 될 것 같다는 확신이 들었다. 객체와 sort를 이용한 해결 방법은 다음과 같다. 1. plays, ids를 인자로 갖는 SongInfo 객체를 조회수 내림차순, id 오름차순으로 정렬할 Comparable 과 함께 생성 2. 조회수의 누적합 totalPlays와 SongInfo의 ArrayList를 인자로 갖는 GenresInfo 객체를 totalPlays 내림차순으로 정렬할 Compar..
음...일단 도대체 왜 어제 풀었던 와 같은 LV인지 모르겠다. 같은 원리로 푸는 건 인정하나, 애초에 들어가는 기본 원리 자체가 나는 이해하기 꽤나 힘들었다. 처음엔 도저히 감이 안와서 하나씩 카운트하며 경우의 수를 모두 세려고 생각했다. 하지만 for 문이 최소 3개 이상은 들어갈 게 분명해서(이는 99.99%의 확률로 테스트 케이스를 통과하지 못한다.) 다른 방법을 고민했다. 그렇게 해서 도출한게, 바로 경우의 수 공식!(확통을 제대로 공부하여 안 까먹었다면 바로 나왔겠지....) 경우의 수 공식: 위와 같이, 4종류의 옷을 각각 A, B, C, D 개씩 가지고 있다면, 옷을 모두 벗는 경우를 제외하고 모든 경우의 수는 (A + 1)(B + 1)(C + 1)(D + 1)이다. Input은 {Glas..
전화번호 목록에 어떤 번호가 다른 번호의 앞부분에 모두 포함되는 경우를 찾아 false를 리턴하면 되는 간단한 문제이다. 처음엔 "이건 또 왜 Map을 써야하지?" 라는 생각이 들 정도의 간단한 문제인 줄 알아, 그대로 이중 for문을 이용하여 풀었다. 결과는... 아주 당연하게도 시간 초과....ㅎㅎ 테스트 케이스들이 100ms를 넘어갈 때부터 느낌이 쎄~ 하긴 했지만...처참했다. 그렇다면, Map을 사용하여 시간을 줄여야한다는 건데... 어떻게...? 고민 끝에 전화번호를 길이가 긴 순서대로 정렬하여 조각 조각 잘라 HashMap에 넣고, 넣기 전에 번호의 조각이 들어가 있는지, 없는지 확인하여 이미 들어간 조각이라면 바로 false를 반환하도록 설계하기로 했다. 우선 정렬은 Comparator클래..
Hash 카테고리 안에 있는 문제라 당연히 HashMap을 사용하여 푸는 문제로 착각했다. 물론 풀이는 가능하지만 HashMap을 사용하게되면 동명이인이 마라톤에 참가했을 경우 문제가 좀 복잡해진다. Map을 사용하지 않고 그냥 배열을 각각 정렬 후에 일치 여부를 확인해주면 아주 간단하게 풀이가 가능한 문제이다. Code: import java.util.Arrays; public class Solution { public String solution(String[] participant, String[] completion) { String answer = ""; boolean isBreaked = false; Arrays.sort(participant); Arrays.sort(completion); f..
문제를 보자마자 무의식적으로 이중배열을 사용하여 문제를 풀려고 했었다. 이중배열 선언 후, 하나하나 메모리를 할당해주어 방번호를 지정하여 알아내는 방법을 사용하면, 확실하게 구현이 가능했으나, 이건 속도적, 메모리적으로 매우매우매우 비효율적인 방법이다. 이 문제는 나눗셈과 모듈러 연산 한번씩이면 바로 해결되는 아주 간단한 문제이다. Code: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new Buffered..
처음 문제를 보고, 단순한 객체 구현만으로 쉽게 풀 수 있을 줄 알았다.... ㅎㅎ...시간 제한이 0.15초에 입력 범위가 10000000000이라는 사실을 간과했다. 단순 객체 구현으로 풀면 10000% 시간 초과가 나올 것이 뻔했기에 문제를 수학적으로 접근하는 것이 필요했다. 달팽이는 낮에 A 만큼 올라가고, 밤에 B만큼 떨어진다. 즉, 전체 높이를 (A-B)만큼 나눈 몫이 정답인가? 했지만 한 가지 조건이 더 있다. 한번 달팽이가 정상에 도달하면, 달팽이는 미끄러지지 않는다. 정리하면, 달팽이는 하루에 (A-B)씩 V 높이를 오르는 것이 아닌, (A-B)씩 V - B 높이를 오르는 것이다. 또한 높이와 달팽이의 속력을 나눈 나머지가 0이면, 나눈 몫이 정답이겠지만, 나누어 떨어지지 않는다면, 달팽..
원리는 간단하다. 시작 숫자가 1일 때, 벌집은 1개의 층을 가진다는 개념부터 시작하면, Number Layer 1 1 ~7 2 ~19 3 ~37 4 ~61 5 즉, 앞 층의 마지막 숫자에 Layer x 6 을 더해주면 다음 층의 숫자 범위를 구할 수 있다. Code: import java.io.IOException; import java.util.Scanner; public class Main { public static void main(String[] args) throws IOException { Scanner input = new Scanner(System.in); int firstInput = input.nextInt(); int layer = 1; int start = 1; while(start
- 정보보안기사 #실기 #정리
- react
- 맛집
- 인천 구월동 맛집
- Promise
- 이탈리안 레스토랑
- redux-thunk
- javascript
- await
- 인천 구월동 이탈리안 맛집
- Async
- react-native
- redux
- 파니노구스토
- AsyncStorage
- Total
- Today
- Yesterday