Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- softeer
- Lv. 2
- Lv. 0
- SQL 고득점 KIT
- LEVEL 2
- Dynamic Programming
- Python
- 티스토리챌린지
- 자바스크립트
- Java
- Lv. 1
- join
- javascript
- 깊이 우선 탐색
- level 3
- bfs
- Lv. 3
- group by
- 소프티어
- DP
- 너비 우선 탐색
- 파이썬
- 프로그래머스
- C언어
- 오블완
- programmers
- select
- SQL
- dfs
- 동적계획법
Archives
- Today
- Total
몸과 마음이 건전한 SW 개발자
프로그래머스 [Lv. 2] 시소 짝꿍 {언어 : Java} 본문
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/152996
정답 코드
import java.util.*;
class Solution {
public Map<Integer, Integer> Counter(int[] lst) {
Map<Integer, Integer> dict = new HashMap<>();
for (int n: lst) {
if (dict.containsKey(n)){
dict.put(n, dict.get(n) + 1);
} else {
dict.put(n, 1);
}
}
return dict;
}
public long solution(int[] weights) {
long answer = 0;
Map<Integer, Integer> counter = Counter(weights);
for (int k : counter.keySet()) {
long cnt = counter.get(k);
if (cnt >= 2) {
answer += cnt * (cnt - 1) / 2;
}
if (k * 2 % 3 == 0 && counter.containsKey(k*2/3)) {
answer += cnt * (long) counter.get(k*2/3);
}
if (counter.containsKey(k*2)) {
answer += cnt * (long) counter.get(k*2);
}
if (k * 3 % 4 == 0 && counter.containsKey(k*3/4)) {
answer += cnt * (long) counter.get(k*3/4);
}
}
return answer;
}
}
풀이 방법
- 몸무게를 key값으로 하는 map을 만든다.
- value는 해당 몸무게의 갯수가 된다.
- map에서 키 값들을 빼서 조건에 따라 answer에 값을 더해주면 된다.
- 현재 몸무게의 수가 2개 이상이라면 nC2 = (n * (n-1)) / 2를 answer에 더해준다.
- 2m와 3m에 각각 앉는 경우 (현재 몸무게) * 2 / 3이 map에 있다면 cnt와 곱해서 answer에 더해준다.
- 2m와 4m에 각각 앉는 경우 (현재 몸무게) * 2이 map에 있다면 cnt와 곱해서 answer에 더해준다.
- 이 조건문은 (현재 몸무게) / 2가 map에 있다면 cnt와 곱해서 answer에 더해줘도 된다.
- 하지만 앞에 조건이 하나 더 붙게 되므로 비효율적이다.
- (현재 몸무게) % 2 == 0과 같은 조건이 더 붙어야 한다.
- 3m와 4m에 각각 앉는 경우 (현재 몸무게) * 3 / 4이 map에 있다면 cnt와 곱해서 answer에 더해준다.
- anwer를 출력하면 끝!
느낀점
- 다시 봐도 새롭다.
- JavaScript로도 다시 풀어 봐야겠다.
'알고리즘 > 풀었지만 다시 보기' 카테고리의 다른 글
프로그래머스 [Lv. 2] 빛의 경로 사이클 {언어 : Python} (0) | 2024.11.17 |
---|---|
프로그래머스 [Lv. 2] 마법의 엘리베이터 {언어 : Python} [백트래킹] (0) | 2024.11.16 |
프로그래머스 [Lv. 3] 고고학 최고의 발견 {언어 : JavaScript} (2) | 2024.11.13 |
프로그래머스 [Lv. 3] 상담원 인원 {언어 : JavaScript} (1) | 2024.11.07 |
Softeer [Level 3] 루돌프 월드컵 {언어 : JavaScript} [반올림 주의] (2) | 2024.11.02 |