본문 바로가기

전체 글103

[프로그래머스] 보석쇼핑 이 문제의 경우는 효율성과 정확성이 별도로 채점되는 문제이다. 정확성의 경우 이중 for문을 이용해서 0,0~N,N까지 모든 경우 중에서 모든 보석을 포함하고 있는 모든 경우를 체크해서 정렬을 해주면 맞출 수 있다. 하지만 O(N^2) 의 시간 복잡도를 가지기 때문에 N의 크기 제한이 10만 인것을 생각해보면 효율성은 통과하기 힘들다. 이 문제에서 주목해야 할 부분은 "특정 범위의 보석을 모두 싹쓸이 한다" 이다. 이 부분만 봐도 투포인터를 이용하여 풀어야 할 것 같다는 생각이 드는 문제이다. 투포인터를 이용하여 범위를 조정해 나가며 조건을 만족하는 모든 값을 저장한 후 문제에서 요청하는대로 값을 정렬하여 보내준다. 이때 잊어버리면 안되는 점은 "만약 가장 짧은 구간이 여러 개라면 시작 진열대 번호가 가.. 2022. 10. 3.
[Redis] Redis의 자료구조 Redis 레디스는 아래 링크한 이전 게시물에서 간단하게 설명했듯이 NoSQL의 일종이며 In-memory에 저장되므로 굉장히 다양한 자료구조를 지원한다. 이번에는 각 자료구조들에 대해서 알아보도록 하겠다. String String은 이름 그대로 단순히 String을 저장하는 방식으로 Key/Value 형식으로 값이 저장된다. my-redis:6379> set test 10 my-redis:6379> get test "10" Set(집합) Set은 자바에서 Set과 거의 동일하다고 볼 수 있다. 데이터를 중복해서 저장하지 않고 정렬을 하지 않는다. my-redis:6379> sadd testSet test (integer) 1 my-redis:6379> sadd testSet test (integer) .. 2022. 10. 3.
[HackerRank] Sherlock and the Valid String 이 문제는 단순한 구현 문제로 문제에 대한 세부 조건을 잘 읽지 않으면 틀릴 수 있는 문제이다. public static String isValid(String s) { // Write your code here HashMap map = new HashMap(); pushCharToMap(s, map); return checkValidation(map); } public static void pushCharToMap(String s, HashMap map) { for(int i = 0; i v+1); } } public static S.. 2022. 10. 3.
[HakerRank] Climbing the Leaderboard 링크에 들어가서 보면 알겠지만 문제 자체는 쉽지만 시간 복잡도를 생각하지 않으면 시간복잡도를 만족시키기 어려운 문제이다. 우선 시간복잡도를 생각하지 않고 정말 단순하게 푸는 방법을 다음과 같이 생각하였다. public static List climbingLeaderboard(List ranked, List player) { // Write your code here List answer = new ArrayList(); for(Integer playerScore : player) { var resultList = ranked.stream().distinct().filter(x -> x > playerScore).collect(Collectors.toList()); answer.add(resultList... 2022. 10. 2.