728x90
문제
사람의 덩치를 비교할 때 몸무게와 키를 이용한다.
A와 B의 (몸무게, 키)가 각각 (x, y), (p, q)이고 x>p, y>q라면 A는 B보다 덩치가 크다고 할 수 있다. 하지만 x<p, y>q라면 비교할 수 없다.
따라서 자신보다 몸무게와 키가 큰 사람의 수+1이 자신의 등수가 된다.
N명의 사람에 대한 몸무게와 키가 주어질 때 등수를 순서대로 출력해보자
입력
첫 줄에는 전체 사람의 수 N이 주어진다. 그리고 이어지는 N개의 줄에는 각 사람의 몸무게와 키를 나타내는 양의 정수 x와 y가 하나의 공백을 두고 각각 입력한다.
출력
사람의 덩치 등수를 구해서 그 순서대로 첫 줄에 출력해야 한다. 단, 각 덩치 등수는 공백문자로 분리되어야 한다.
python
1. 이중 for문으로 탐색한다.
2. 자신보다 큰 사람의 수를 첫 번째 for문을 시작할 때마다 카운트할 k를 1로 초기화한다.
3. 인덱스 y와 x가 다를 때 몸무게와 키를 비교했을 때 y인덱스가 가리키는 값이 모두 작다면 k를 증가시킨다.
4. 두 번째 for문이 종료될 때마다 k를 rank 리스트에 추가한다.
5. rank 리스트를 한 칸씩 띄고 출력한다.
N = int(input())
people = []
for _ in range(N):
w, h = map(int, input().strip().split())
people.append((w, h))
rank = []
for y in range(len(people)):
k = 1
for x in range(len(people)):
if x != y:
if people[y][0] < people[x][0] and people[y][1] < people[x][1]:
k += 1
rank.append(k)
for r in rank:
print(r,end=' ')
c++
1. 몸무게와 키를 담을 2차원 배열을 선언하고 두 번째 인덱스의 0에는 몸무게, 1에는 키가 저장되도록 한다.
2. 이중 for문을 실행하여 현재 인덱스의 몸무게와 키가 모두 큰 사람이 있다면 해당 인덱스의 rank를 증가시킨다.
3. 최종적으로 모두 1씩 더 증가된 rank를 출력한다.
#include "pch.h"
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main()
{
int n;
int info[50][2] = { 0, };
int rank[50] = { 0, };
cin >> n;
for (int i = 0; i < n; i++) {
cin >> info[i][0] >> info[i][1];
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i != j) {
if (info[i][0] < info[j][0] && info[i][1] < info[j][1])
rank[i]++;
}
}
}
for (int i = 0; i < n; i++) {
cout << ++rank[i] << ' ';
}
return 0;
}
'알고리즘 풀이 > 백준' 카테고리의 다른 글
[백준 3986] 좋은단어 cpp-py (0) | 2021.01.27 |
---|---|
[백준 10773] 제로 cpp-py (0) | 2021.01.27 |
[백준 2231] 분해합 cpp-py (0) | 2021.01.26 |
[백준 2309] 일곱 난쟁이 (0) | 2021.01.26 |
[백준 2789] 블랙잭 (0) | 2021.01.26 |