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 |
Tags
- 1차원 DP
- 2차원 dp
- 99클럽
- @BeforeAll
- @BeforeEach
- @Builder
- @Entity
- @GeneratedValue
- @GenericGenerator
- @NoargsConstructor
- @Query
- @Table
- @Transactional
- Actions
- Amazon EFS
- amazon fsx
- Android Studio
- ANSI SQL
- ApplicationEvent
- assertThat
- async/await
- AVG
- AWS
- Azure
- bind
- builder
- button
- c++
- c++ builder
- c03
Archives
- Today
- Total
기록
프로그래머스_Java_시소짝꿍 본문
문제
https://school.programmers.co.kr/learn/courses/30/lessons/152996
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
위 문제에서 짝을 지을 수 있는 경우의 수를 아래처럼 표현할 수 있다. 아래에서 나올 수 있는 두수의 관계는 (1, 2/3, 2, 4/3)으로 4가지이다.
2배 | 3배 | 4배 | |
1/2배 | 2/2 | 3/2 | 4/2 |
1/3배 | 2/3 | 3/3 | 4/3 |
1/4배 | 2/4 | 3/4 | 4/4 |
[100, 200]이 무게 정보로 주어졌을 때, 100의 2배는 200이고, 200의 1/2배는 100이다. 따라서, 중복으로 체크되는 것을 막기 위해서 위 표에서 1보다 큰 값들만 사용한다.
- 같은 무게의 사람이 여러명일 때
[10, 10, 10, 10, 10] 처럼 무게정보가 주어졌을 때, 5개중에 2개를 선택하는 방법은 5*4/2 처럼 계산할 수 있다.
long n = 같은 무게의 사람 수;
if (n>1) answer += (n-1)*n/2;
- 다른 무게의 사람들을 확인
[100, 100, 100, 100, 200, 200] 처럼 무게정보가 주어졌다고 해보자.
이때 4개의 100중에 1개 2개의 200 중에 1개를 선택하는 방법은 4*2처럼 계산할 수 있다.
long n = 같은 무게의 사람 수;
answer += n * (다른 무게의 사람수);
코드
import java.util.*;
class Solution {
public long solution(int[] weights) {
// counter
Map<Integer, Long> counter = new HashMap();
for (int w : weights){
counter.put(w, counter.getOrDefault(w, 0L)+1);
}
// match
long answer = 0;
for (int w : counter.keySet()){
// 같은 무게의 사람이 여러 명일 때
long n = counter.getOrDefault(w, 0L);
if (n>1) answer += (n-1)*n/2;
// 다른 무게의 사람
if (w%2==0) answer += n*counter.getOrDefault(w*3/2, 0L);
if (w%3==0) answer += n*counter.getOrDefault(w*4/3, 0L);
answer += n*counter.getOrDefault(w*2, 0L);
}
return answer;
}
}
'코딩테스트 > Java' 카테고리의 다른 글
백준_Java_20207_달력 (0) | 2025.01.10 |
---|---|
백준_Java_14719_빗물 (0) | 2025.01.03 |
프로그래머스_Java_테이블 해시 함수 (0) | 2023.10.11 |
프로그래머스_java_숫자 카드 나누기 (0) | 2023.10.07 |
백준_9663_N-Queen (0) | 2020.09.01 |
Comments