-
[Programmers] 시소 짝꿍 / ❌Algorithm/Programmers 2024. 7. 21. 18:41
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 제출 코드 (1시간 2분 23초 / Dictionary)
import java.util.*; class Solution { public long solution(int[] weights) { long answer = 0; Map<Double, Integer> map = new HashMap<>(); Arrays.sort(weights); for(int weight : weights) { double a = (double) weight; double b = ((double) weight * 2.0) / 3.0; double c = ((double) weight * 2.0) / 4.0; double d = ((double) weight * 3.0) / 4.0; if(map.containsKey(a)) answer += map.get(a); if(map.containsKey(b)) answer += map.get(b); if(map.containsKey(c)) answer += map.get(c); if(map.containsKey(d)) answer += map.get(d); map.put((weight * 1.0), map.getOrDefault((weight * 1.0), 0) + 1); } return answer; } }
2. 구현 로직
- weights의 숫자를 오름차순으로 정렬한다.
- for문으로 weights를 탐색한다.
- 오름차순이므로 정답이 되는 경우는 1:1 / 2:3 / 2:4 / 3:4인 경우 밖에 없으므로 값을 계산해준다.
- 만약 map에 정답 비율에 해당되는 값이 있다면 answer에 key의 value를 더해준다.
- map에 key는 weight 값을 넣어주고 만약 같은 수가 있을 경우도 있기에 map.get을 통해 value를 가져와서 +1을 해준다.
3. 풀이 회고
- 이번 문제도 weights의 크기가 100,000 이하로 시간복잡도 O(nlogn) 이하로 풀어야겠다고 생각했다.
- 알고리즘을 적용해야 풀 수 있을 거 같아서 계속해서 어떤 알고리즘을 적용할지 생각해 봤는데 떠오르지 않았다.
- 결국, 구글링을 통해 어떤 알고리즘이 적용되는지 검색했고 자료구조 Dictionary를 활용한다는 것을 알았다.
- 시간복잡도를 고려하고 계속해서 어떤 알고리즘을 사용할지 고민하는데 자료구조를 활용하여 문제 풀이가 가능하다는 점도 고려해야될 거 같다.
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] 귤 고르기 / ⭕ (0) 2024.07.24 [Programmers] 마법의 엘리베이터 / ⭕ (1) 2024.07.23 [Programmers] 뒤에 있는 큰 수 찾기 / ❌ (0) 2024.07.20 [Programmers] 숫자 변환하기 / ⭕ (0) 2024.07.17 [Programmers] 무인도 여행 / ⭕ (4) 2024.07.16