본문 바로가기

Coding Tests/백준 온라인

(Python) boj_7568번

<문제>

 

https://www.acmicpc.net/problem/7568

 

7568번: 덩치

우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩

www.acmicpc.net

 

<Fail>

 

N = int(input())
arr = []
for i in range(N):
    a,b = map(int,input().split())
    arr.append(tuple(a,b))
for j in range(N):
    k = 1
    for k in range(N):
        if arr[j] == arr[k]:
            continue
        if arr[j][0] < arr[k][0]:
            if arr[j][1] < arr[k][1]:
                k+=1
    print(k,end = '')

 

<틀린 이유>

 

1. 원래 출력돼야 하는 k값과 반복문 인자값 k와 중복이되, 올바르게 k값이 출력될 수 없습니다. 

2.tuple()을 잘못 사용하여 TypeError가 발생합니다. tuple()에는 인자가 1개가 와야 합니다. list(), int(),,,,,도 마찬가지

 

<Pass>

 

#7568번-덩치
N = int(input())
arr = []
for i in range(N):
    a,b = map(int,input().split())
    arr.append((a,b))

for j in range(N):
    k = 1
    for p in range(N):
        if arr[j][0] < arr[p][0] and arr[j][1] < arr[p][1]:
            k+=1
    print(k,end = ' ')

 

-- (C언어) 7568 --

 

#include<stdio.h>
int main()
{
    int arr[50][2] = { 0 };
    int n, a, b;
    scanf("%d", &n);

    for (int i = 0; i < n; i++)
    {
        scanf("%d %d", &a, &b);
        arr[i][0] = a;
        arr[i][1] = b;
    }
    for (int j = 0; j < n; j++)
    {
        int k = 1;
        for (int p = 0; p < n; p++)
        {
            if ((arr[j][0] < arr[p][0]) && (arr[j][1] < arr[p][1])) {
                k++;
            }
        }
        printf("%d ", k);
    }
    return 0;

}

 

처음 코드에서 outofbounds 에러가 발생하였었는데, int arr[2][50]과 같이 이차원 배열의 행과 열을 반대로 생각하여 발생한 에러였습니다.