ํฐ์คํ ๋ฆฌ ๋ทฐ
[ํ๋ก๊ทธ๋๋จธ์ค_์ํด๋ฆฌ ์ฑ๋ฆฐ์ง 6์ฃผ์ฐจ] ๋ณต์ ์ ๋ ฌํ๊ธฐ
choi95 2021. 10. 16. 14:06๋ฌธ์
๋ฌธ์ ์ค๋ช
๋ณต์ ์ ์๋ค์ ๋ชธ๋ฌด๊ฒ weights์, ๋ณต์ ์ ์๋ค์ ์ ์ ์ ๋ํ๋ด๋ head2head๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ๋ณต์ ์ ์๋ค์ ๋ฒํธ๋ฅผ ๋ค์๊ณผ ๊ฐ์ ์์๋ก ์ ๋ ฌํ ํ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
- ์ ์ฒด ์น๋ฅ ์ด ๋์ ๋ณต์์ ๋ฒํธ๊ฐ ์์ชฝ์ผ๋ก ๊ฐ๋๋ค. ์์ง ๋ค๋ฅธ ๋ณต์๋ ๋ถ์ด๋ณธ ์ ์ด ์๋ ๋ณต์์ ์น๋ฅ ์ 0%๋ก ์ทจ๊ธํฉ๋๋ค.
- ์น๋ฅ ์ด ๋์ผํ ๋ณต์์ ๋ฒํธ๋ค ์ค์์๋ ์์ ๋ณด๋ค ๋ชธ๋ฌด๊ฒ๊ฐ ๋ฌด๊ฑฐ์ด ๋ณต์๋ฅผ ์ด๊ธด ํ์๊ฐ ๋ง์ ๋ณต์์ ๋ฒํธ๊ฐ ์์ชฝ์ผ๋ก ๊ฐ๋๋ค.
- ์์ ๋ณด๋ค ๋ฌด๊ฑฐ์ด ๋ณต์๋ฅผ ์ด๊ธด ํ์๊น์ง ๋์ผํ ๋ณต์์ ๋ฒํธ๋ค ์ค์์๋ ์๊ธฐ ๋ชธ๋ฌด๊ฒ๊ฐ ๋ฌด๊ฑฐ์ด ๋ณต์์ ๋ฒํธ๊ฐ ์์ชฝ์ผ๋ก ๊ฐ๋๋ค.
- ์๊ธฐ ๋ชธ๋ฌด๊ฒ๊น์ง ๋์ผํ ๋ณต์์ ๋ฒํธ๋ค ์ค์์๋ ์์ ๋ฒํธ๊ฐ ์์ชฝ์ผ๋ก ๊ฐ๋๋ค.
์ ํ์ฌํญ
- weights์ ๊ธธ์ด๋ 2 ์ด์ 1,000 ์ดํ์
๋๋ค.
- weights์ ๋ชจ๋ ๊ฐ์ 45 ์ด์ 150 ์ดํ์ ์ ์์ ๋๋ค.
- weights[i] ๋ i+1๋ฒ ๋ณต์์ ๋ชธ๋ฌด๊ฒ(kg)๋ฅผ ์๋ฏธํฉ๋๋ค.
- head2head์ ๊ธธ์ด๋ weights์ ๊ธธ์ด์ ๊ฐ์ต๋๋ค.
- head2head์ ๋ชจ๋ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ weights์ ๊ธธ์ด์ ๋์ผํ๋ฉฐ, 'N', 'W', 'L'๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์ ๋๋ค.
- head2head[i] ๋ i+1๋ฒ ๋ณต์์ ์ ์ ์ ์๋ฏธํ๋ฉฐ, head2head[i][j]๋ i+1๋ฒ ๋ณต์์ j+1๋ฒ ๋ณต์์ ๋งค์น ๊ฒฐ๊ณผ๋ฅผ ์๋ฏธํฉ๋๋ค.
- 'N' (None)์ ๋ ๋ณต์๊ฐ ์์ง ๋ถ์ด๋ณธ ์ ์ด ์์์ ์๋ฏธํฉ๋๋ค.
- 'W' (Win)๋ i+1๋ฒ ๋ณต์๊ฐ j+1๋ฒ ๋ณต์๋ฅผ ์ด๊ฒผ์์ ์๋ฏธํฉ๋๋ค.
- 'L' (Lose)๋ i+1๋ฒ ๋ณต์ฌ๊ฐ j+1๋ฒ ๋ณต์์๊ฒ ์ก์์ ์๋ฏธํฉ๋๋ค.
- ์์์ i์ ๋ํด์ head2head[i][i] ๋ ํญ์ 'N'์ ๋๋ค. ์๊ธฐ ์์ ๊ณผ ์ธ์ธ ์๋ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ์์์ i, j์ ๋ํด์ head2head[i][j] = 'W' ์ด๋ฉด, head2head[j][i] = 'L'์ ๋๋ค.
- ์์์ i, j์ ๋ํด์ head2head[i][j] = 'L' ์ด๋ฉด, head2head[j][i] = 'W'์ ๋๋ค.
- ์์์ i, j์ ๋ํด์ head2head[i][j] = 'N' ์ด๋ฉด, head2head[j][i] = 'N'์ ๋๋ค.
์ ์ถ๋ ฅ ์
weightshead2headresult
[50,82,75,120] | ["NLWL","WNLL","LWNW","WWLN"] | [3,4,1,2] |
[145,92,86] | ["NLW","WNL","LWN"] | [2,3,1] |
[60,70,60] | ["NNN","NNN","NNN"] | [2,1,3] |
์ ์ถ๋ ฅ ์ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
- ๋ค์์ ์ ์๋ค์ ์ ๋ณด๋ฅผ ๋ํ๋ธ ํ์ ๋๋ค.
์ ์ ๋ฒํธvs 1๋ฒvs 2๋ฒvs 3๋ฒvs 4๋ฒ์น๋ฅ ์๊ธฐ๋ณด๋ค ๋ฌด๊ฑฐ์ด ๋ณต์๋ฅผ ์ด๊ธด ํ์๋ชธ๋ฌด๊ฒ
1๋ฒ | - | ํจ๋ฐฐ | ์น๋ฆฌ | ํจ๋ฐฐ | 33.33% | 1ํ | 50kg |
2๋ฒ | ์น๋ฆฌ | - | ํจ๋ฐฐ | ํจ๋ฐฐ | 33.33% | 0ํ | 82kg |
3๋ฒ | ํจ๋ฐฐ | ์น๋ฆฌ | - | ์น๋ฆฌ | 66.66% | 2ํ | 75kg |
4๋ฒ | ์น๋ฆฌ | ์น๋ฆฌ | ํจ๋ฐฐ | - | 66.66% | 0ํ | 120kg |
- ๋ณธ๋ฌธ์ ์์ ๋ ์ฐ์ ์์๋ฅผ ๋ฐ๋ผ [3,4,1,2] ๋ฅผ return ํฉ๋๋ค.
์ ์ถ๋ ฅ ์ #2
- ๋ค์์ ์ ์๋ค์ ์ ๋ณด๋ฅผ ๋ํ๋ธ ํ์ ๋๋ค.
์ ์ ๋ฒํธvs 1๋ฒvs 2๋ฒvs 3๋ฒ์น๋ฅ ์๊ธฐ๋ณด๋ค ๋ฌด๊ฑฐ์ด ๋ณต์๋ฅผ ์ด๊ธด ํ์๋ชธ๋ฌด๊ฒ
1๋ฒ | - | ํจ๋ฐฐ | ์น๋ฆฌ | 50% | 0ํ | 145kg |
2๋ฒ | ์น๋ฆฌ | - | ํจ๋ฐฐ | 50% | 1ํ | 92kg |
3๋ฒ | ํจ๋ฐฐ | ์น๋ฆฌ | - | 50% | 1ํ | 86kg |
- ๋ณธ๋ฌธ์ ์์ ๋ ์ฐ์ ์์๋ฅผ ๋ฐ๋ผ [2,3,1] ์ return ํฉ๋๋ค.
์ ์ถ๋ ฅ ์ #3
- ๋ค์์ ์ ์๋ค์ ์ ๋ณด๋ฅผ ๋ํ๋ธ ํ์ ๋๋ค.
์ ์ ๋ฒํธvs 1๋ฒvs 2๋ฒvs 3๋ฒ์น๋ฅ ์๊ธฐ๋ณด๋ค ๋ฌด๊ฑฐ์ด ๋ณต์๋ฅผ ์ด๊ธด ํ์๋ชธ๋ฌด๊ฒ
1๋ฒ | - | - | - | 0% (๋ฌด์ ์ ) | 0ํ | 60kg |
2๋ฒ | - | - | - | 0% (๋ฌด์ ์ ) | 0ํ | 70kg |
3๋ฒ | - | - | - | 0% (๋ฌด์ ์ ) | 0ํ | 60kg |
- ๋ณธ๋ฌธ์ ์์ ๋ ์ฐ์ ์์๋ฅผ ๋ฐ๋ผ [2,1,3] ์ return ํฉ๋๋ค.
์ฝ๋
function solution(weights, head2head) {
var answer = [];
let result = [];
for(let i = 0; i < head2head.length; i++) {
let score = 0;
let myWeight = weights[i];
for(let j = 0; j < head2head[i].length; j++) { //์๋๋ฐฉ๊ณผ์ ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ ๋น๊ต
let fight = head2head[i][j]; // ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ
let opWeight = weights[j];
if(fight === 'N') continue; // ์๊ธฐ ์์ ๊ณผ ๊ฒฝ๊ธฐํ์ ๊ฒฝ์ฐ
if(fight === 'W') {
if(myWeight < opWeight) score += 2; // ์๋๋ฐฉ์ ์ด๊ฒผ์ผ๋ฉฐ ์๋๋ฐฉ๋ณด๋ค ๋ฌด๊ฒ๊ฐ ๋ฎ์ ๊ฒฝ์ฐ์๋ 2๋ฅผ ๊ฐ์ฐ
else score += 1; // ๋ฌด๊ฒ๊ฐ ๋ฎ์ ๊ฒฝ์ฐ์๋ 1์ ๊ฐ์ฐ
}
else if(fight === 'L') score -= 1; // ์๋๋ฐฉ์๊ฒ ์ก์ ๊ฒฝ์ฐ์๋ 1์ ๊ฐ์ฐ
}
result.push([score, myWeight, i + 1]); // [์ ์, ๋ฌด๊ฒ, ์ ์ ๋ฒํธ]
}
result.sort((a, b) => {
if(a[0] === b[0]) return b[1] - a[1];
else return b[0] - a[0]
})
answer = result.map(elem => {return elem[2]});
return answer;
}
์ค๋ต
ํ ์คํธ ์ผ์ด์ค๋ฅผ ์คํํ์ ๋๋ ๋ชจ๋ ๋ง์์ง๋ง ์ฝ๋๋ฅผ ์ ์ถํ์ ๋ ๋ง์ ์ผ์ด์ค์์ ์ค๋ต ์ฒ๋ฆฌ๋์๋ค.
์ด์ ๋ฌธ์ ๋ฅผ ๋ค์ ์ฝ์ด๋ณด๋ ๋ฌธ์ ์์ ์๊ตฌํ๋ ์กฐ๊ฑด์ ์ ๋๋ก ์ถฉ์กฑ์ํค์ง ๋ชปํ์์ ํ์ธํ์๋ค.
- ์น๋ฅ ์ ํ ๋๋ก ์์๋ฅผ ๊ฒฐ์ ํ์ด์ผ ํ๋๋ฐ ๋จ์ํ ์ ์๋ฅผ ํตํด ์์๋ฅผ ๊ฒฐ์ ํ๋ค
- ์ ์กฐ๊ฑด์ ์๊ฐํ์ง ๋ชปํด 'N'์ธ ๊ฒฝ์ฐ์ ์ด๋ ํ ์ฐ์ฐ ์ฒ๋ฆฌ ์์ด ๋์ด๊ฐ๋ค_ (์น๋ฅ ) = (์ด๊ธด ๊ฒฝ๊ธฐ ์) / (์น๋ฃฌ ๊ฒฝ๊ธฐ ์)
- ๋ฌด๊ฒ๊ฐ ๋ฎ์ ์ ์๊ฐ ๋ ๋์ ์์๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค ๋ผ๋ ์กฐ๊ฑด์ ์ฒซ ๋ฒ์งธ ์กฐ๊ฑด์์ ์์๋ฅผ ๊ฒฐ์ ์ง์ง ๋ชปํ ๊ฒฝ์ฐ์ ์ฐจํ๋ก ํ์ํด์คฌ์ด์ผ ํ์ง๋ง, ๋ณธ ์ฝ๋์์๋ ์ ์ 1์ ์ ๋ ์ฃผ๋ ์์ผ๋ก ์ฐ์ฐ ์ฒ๋ฆฌํ๋ค.
์์ ์ฌํญ์ ํ ๋๋ก ๋ค์ ์ฝ๋๋ฅผ ์์ฑํด๋ณด์๋ค.
์ฝ๋
function rating(arr1, arr2, num) {
const ratings = []
for(let i=0; i<num; i++) {
let wins = 0
let weight = 0
let none = 0
for(let j=0; j<num; j++) {
if(arr1[i][j] === "W") {
wins++
if(arr2[j] > arr2[i]) weight++
} else if(arr1[i][j] === "N") none ++; // ์น๋ฃฌ ๊ฒฝ๊ธฐ ์๋ฅผ ๊ตฌํ๊ธฐ ์ํด N์ธ ๊ฒฝ์ฐ์๋ ๊ด๋ จ ๋ณ์์ ๊ฐ์ฐ
}
if(num-none !== 0) ratings.push([i+1, wins/(num-none)*100, weight, arr2[i]]) // ๊ฒฝ๊ธฐ๋ฅผ ํ๋๋ ์น๋ฃจ์ง ์์์ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ธฐ ์ํ ์กฐ๊ฑด
else ratings.push([i+1, 0, weight, arr2[i]])
}
return ratings // [์ ์ ๋ฒํธ, ์น๋ฅ , ์์ ๋ณด๋ค ์ฒด๊ธ์ด ๋์ ์ ์์ ๋ํ ์น๋ฆฌ ์, ์ ์ ๋ฌด๊ฒ]
}
function solution(weights, head2head) {
const num = weights.length;
const rate = rating(head2head, weights, num);
const answer = rate.sort((a, b) => {
if(a[1] != b[1]) return b[1] - a[1] // ์น๋ฅ
else {
if(a[2] != b[2]) return b[2] - a[2] // ์์ ๋ณด๋ค ์ฒด๊ธ์ด ๋์ ์ ์์ ๋ํ ์น๋ฆฌ ์
else {
if(a[3] != b[3]) return b[3] - a[3] // ์ ์ ์์ ์ ์ฒด๊ธ
else { // ์ ์ ๋ฒํธ๊ฐ ๋ฎ์ ์์
return a[0] - b[0]
}
}
}
}).map(v => v[0]) // ์ต์ข
์ ์ผ๋ก ์ ์ ๋ฒํธ ๋ฐํ
return answer
}