알고리즘 풀이/백준

[백준 7568] 덩치 cpp-py

mhko411 2021. 1. 26. 23:13
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