문제 URL: https://www.acmicpc.net/problem/7568
순위를 매기는 문제입니다. 모든 사람을 다른 모든 사람과 비교해야 하는 전형적인 "완전탐색" 문제입니다.
문제 이해하기
"덩치"는 키와 몸무게 둘 다 커야 인정됩니다. 키만 크거나 몸무게만 많이 나가면 안됩니다.
- A: 키 180, 몸무게 80
- B: 키 175, 몸무게 90
A가 B보다 키는 크지만 몸무게는 적습니다. 그래서 둘은 비교 불가능합니다. 이런 경우 둘 다 1등이 될 수 있습니다.
입력 처리 - map과 타입 변환 주의
const input = require('fs').readFileSync('/dev/stdin').toString()
const lines = input.split('\n')
const n = Number(lines[0])
const people = lines.slice(1, n + 1).map(line => {
const [weight, height] = line.split(' ').map(Number)
return { weight, height }
})
여기서 중요한 포인트가 두 가지 있습니다.
1. split 후에는 무조건 문자열입니다
"55 185".split(' ')을 하면 ['55', '185'] 가 나옵니다. 숫자처럼 보이지만 따옴표 안에 있는 문자열입니다. 그래서 바로 .map(Number)를 붙여서 숫자로 바꿔줘야 합니다.
2. map은 배열을 반환합니다.
line.split(' ').map(Number)의 결과는 [55, 185] 같은 배열이고, 이거 ㄹ구조분해할당 [weight, height]로 받아서 객체로 만듭니다. map은 항상 새로운 배열을 만든다는 걸 기억해야합니다.
순위 계산하기
const ranks = people.map((person, i) => {
let rank = 1 // 기본적으로 1등
for (let j = 0; j < n; j++) {
if (i === j) continue // 자기 자신은 비교 안 함
const other = people[j]
// 상대방이 키도 크고 몸무게도 많이 나가면
if (other.weight > person.weight && other.height > person.height) {
rank++ // 내 순위는 한 단계 밀림
}
}
return rank
})
console.log(ranks.join(' '))
로직은 단순합니다. 각 사람마다 "나보다 덩치 큰 사람이 몇 명인가?"를 세면 됩니다.
만약 나보다 덩치 큰 사람이 2명이면, 내 순위는 3등입니다. 나보다 큰 사람이 0명이면 1등이고요.
전체 풀이
const input = require('fs').readFileSync('/dev/stdin').toString()
const lines = input.split('\n')
const n = Number(lines[0])
const people = lines.slice(1, n + 1).map(line => {
const [weight, height] = line.split(' ').map(Number)
return { weight, height }
})
const ranks = people.map((person, i) => {
let rank = 1
for (let j = 0; j < n; j++) {
if (i === j) continue
const other = people[j]
if (other.weight > person.weight && other.height > person.height) {
rank++
}
}
return rank
})
console.log(ranks.join(' '))'알고리즘 > JavaScript(node.js)' 카테고리의 다른 글
| [백준/Node.js] 2583번: 영역 구하기 (0) | 2026.01.06 |
|---|---|
| [백준/Node.js] 1676번: 팩토리얼 0의 개수 (0) | 2026.01.04 |
| [백준/Node.js] 11720번: 숫자의 합 (0) | 2025.12.21 |
| [백준/Node.js] 11945번: 뜨거운 붕어빵 (0) | 2025.12.16 |
| [백준/Node.js] 2438번: 별 찍기 - 1 (0) | 2025.12.15 |