백준 온라인 저지 / 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정도는 이제 풀만 한 느낌이다?
'백준 알고리즘 > Lang-C#' 카테고리의 다른 글
[백준/C# (.NET)] 10845번 큐 (0) | 2021.08.21 |
---|---|
[백준/C# (.NET)] 10828번 스택 (0) | 2021.08.20 |
[백준/C# (.NET)] 2752번 세수정렬 (0) | 2021.08.15 |
[백준/C# (.NET)] 2525번 오븐 시계 (0) | 2021.08.14 |
[백준/C# (.NET)] 2480번 주사위 세개 (0) | 2021.08.13 |