프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 서로 같은 거리에서 토크 값이 같으려면 몸무게의 비율 = 1:1
- 2m, 4m 거리에서 토크 값이 같으려면 몸무게의 비율 = 1:2
- 2m, 3m 거리에서 토크 값이 같으려면 몸무게의 비율 = 3:2 = 1:3/2
- 3m, 4m 거리에서 토크 값이 같으려면 몸무게의 비율 = 4:3 = 1:4/3
> 특정 인원의 몸무게를 weight라 할 때 weight값의 1:1, 1:2, 1:3/2, 1:4/3에 해당하는 값이 존재하는지 확인해야함
> weightA와 weightB가 다른 경우에는 단순히 weightB에 해당하는 인원 수를 answer에 더하면 되지만 같은 경우에는 중복을 제거하기 위해 n명 중에서 2명을 뽑는 경우의 수 식을 이용해야함
#include <string>
#include <vector>
using namespace std;
long long solution(vector<int> weights) {
long long answer = 0;
// 각 몸무게에 해당하는 인원 수 저장용 배열
vector<long long> count(1001, 0);
long long weight = 0;
// index을 몸무게로 가지는 인원의 수를 저장
for(int i = 0; i < weights.size(); i++) {
count[weights[i]]++;
}
// 특정 몸무게가 2명 이상일 경우 n(n-1)/2 식을 통해 짝의 수를 구함
for(int i = 100; i < 1001; i++) {
if(count[i] >= 2) {
answer += (count[i] * (count[i] - 1)) / 2;
}
}
//weight의 1:2, 1:3/2, 1:4/3에 해당하는 몸무게를 가지는 인원 수를 구해서 짝을 만듦
for(int i = 0; i < weights.size(); i++) {
// 1:2
weight = weights[i] * 2;
if(weight <= 1000) answer += count[weight];
// 2:3
if(weights[i] % 2 == 0) {
weight = weights[i] * 3 / 2;
if(weight <= 1000) answer += count[weight];
}
// 3:4
if(weights[i] % 3 == 0) {
weight = weights[i] * 4 / 3;
if(weight <= 1000) answer += count[weight];
}
}
return answer;
}
'프로그래머스 > 2레벨' 카테고리의 다른 글
[프로그래머스/C++] 마법의 엘리베이터 (0) | 2024.03.08 |
---|---|
[프로그래머스/C++] 가장 큰 정사각형 찾기 (0) | 2024.03.08 |
[프로그래머스/C++] 숫자 카드 나누기 (0) | 2024.03.08 |
[프로그래머스/C++] 문자열 압축 (0) | 2024.03.08 |
[프로그래머스/C++] 요격 시스템 (0) | 2024.03.08 |