백준 알고리즘/Lang-C#

[백준/C# (.NET)] 7568번 덩치

Jongung 2021. 8. 19. 20:32

 

백준 온라인 저지 / 7568번 덩치

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

 

7568번: 덩치

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

www.acmicpc.net

 

  • 사용언어 : C# (.NET)
  • 알고리즘 : 구현, 브루트포스 알고리즘

 

 

C#코드

1. 문제 정리

 

이번 문제는 총 1개의 테스트 케이스와 테스트 케이스 * 2의 출력을 받아 계산하는 문제이다.

 

여담으로 정보 올림피아드 초등부 문제라는데... 살짝만 복잡해져도 알고리즘 찾아봐야하는 대학생 나랑... 초등부 학생이랑 비슷하다니..
대단 한 거 같다....ㅠ

 

이름 (몸무게,키) 덩치 등수
A (55,185) 2
B (58,183) 2
C (88,186) 1
D (60,175) 2
E (46,155) 5

예시 입력이다. 

 

문제에서 조건을 살펴보자. 일단 C가 A, B, D보다 키도 크고 몸무게도 더 무겁기 때문에 덩치 등수를 1등으로 정했다.

A, B, D 는 누구는 몸무게가 더 무겁고 누군가는 키가 더 크기에 따로 덩치를 나눌 수 없어 등수를 2등으로 두고

나머지 E는 A, B, C, E 보다 키도 몸무게도 무겁기 때문에 5등으로 정했다. (2등이 3명이기에 5등으로 자동 변경)

 

일단 어떻게 코드로 구현 해야 할지 생각해보자.

 

2. 입력 받아오기

 

일단 입력부터 받아오자. 파이썬같이 쉽게 받아 올 수는 없고 int[] 배열로 받아오도록 해보자.

 

int A = int.Parse(Console.ReadLine());
int[] height = new int[A];
int[] weight = new int[A];

for (int i = 0; i < A; i++) {
string write = Console.ReadLine();
height[i] = int.Parse(write.Split()[0]);
weight[i] = int.Parse(write.Split()[1]);
}

 

"첫 줄에는 전체 사람의 수 N이 주어진다."

말 그대로 테스트 케이스 N을 받아오는 거다. (나는 A로 작성 했다)

그리고 height 배열을 A크기로 만들어주고 weight 배열도 A크기로 만들어 주었다.

 

그리고 for문을 A의 크기까지 돌려서 height,weight 배열의 [i]값에다가 전부 넣어 줬다.

그 사이에 공백을 두고 값을 주니 split 값을 넣고 [0], [1]을 넣어 주어야 제대로 값을 읽어 올 수 있다.

 

입력을 받아 왔으니 이번 문제의 알고리즘을 생각 해 보자.

 


 

3. 브루트포스 알고리즘

 

탐색 알고리즘 중 브루트 포스 알고리즘이 있다. 이것도 다음에 프로그래밍 노트에다가 정리할건데.. 어쨋든 탐색 알고리즘이다.

 

이 문제에선 그 중에서도 이중 for문을 사용한 브루트 포스 알고리즘을 사용 했다.

 

for (int i = 0; i < A; i++)
{
	cnt = 0;
	for (int j = 0; j < A; j++)
	{
		if (height[i] < height[j] && weight[i] < weight[j])
		{
			cnt++;
		}
	}
	Console.WriteLine(cnt + 1);
}

 

이중 포문 i와 j를 만들어서 전부 대입 해보는 방식이다. 전부 비교 해 본 후 문제에서 말한 대로 K+1 즉 우리 코드에선 cnt+1을 해주었다.

 

 

 

4. 완성코드

 

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;

namespace boj
{
    class Program
    {
        static void Main(string[] args)
        {
            int A = int.Parse(Console.ReadLine());
            int[] height = new int[A];
            int[] weight = new int[A];
            int cnt = 0;

            for (int i = 0; i < A; i++) {
                string write = Console.ReadLine();
                height[i] = int.Parse(write.Split()[0]);
                weight[i] = int.Parse(write.Split()[1]);
            }
            for (int i = 0; i < A; i++)
            {
                cnt = 0;
                for (int j = 0; j < A; j++)
                {
                    if (height[i] < height[j] && weight[i] < weight[j])
                    {
                        cnt++;
                    }
                }
                Console.WriteLine(cnt + 1);
            }
        }
    }
}

 

 

실버 5정도는 이제 풀만 한 느낌이다?