Baekjoon 7568번 덩치

노그리·2022년 4월 21일
0

📑 Algorithm

목록 보기
3/15

💭 문제가 궁금하다면?

내가 시도한 방법

  1. 학생들의 몸무게와 키 정보를 kgcm배열에 받아준다.
    (2차원 배열로 할 수 있으나 직관적인 이해를 위해 분리)
  2. ans 배열 : 본인 순서를 인덱스로 하여 등수가 담길 1차원 리스트
  3. 이중 for문을 통해 내가 아니면서(i != j),
    몸무게와 키 모두 나보다 큰 사람을 카운트하고 ans[i]에 등수(cnt+1 할당)
N = int(input())
students = [list(map(int, input().split())) for i in range(N)]
kg, cm = zip(*students)
ans = [0] * N

for i in range(N):
    cnt = 0
    for j in range(N):
        if i != j and (kg[i] < kg[j] and cm[i] < cm[j]):
            cnt += 1
    ans[i] = cnt+1
print(*ans)

[참고]
1번을 수행할 때, 아래와 같이 for문을 사용해도 되지만,
zip이 흩어져있는 배열을 하나로 묶어주듯이, 반대의 역할을 하는 무언가가 있지 않을까 하는 생각이 들어 찾아보다가 zip*(언패킹) 활용 방법을 발견 적용시켰다.


kg, cm = [], []
for _ in range(N):
	v1, v2 = map(int, input().split())
    kg.append(v1)
    cm.append(v2)

더 고민해보기

  • 지금의 코드 형태는 a, b, c, d, e가 있다고 했을 때,
  • a가 기준일 때 b, c, d, e를 확인하면서 본인보다 큰 사람을 카운트하고,
  • b가 기준일 때 a, c, d, e를 확인한다.
  • 여기서 잘 살펴보면 a와 b 사이의 관계를 2번 확인하는 것이다.
    (그래서 이중 루프형태가 나온다)
  • 그래서 좀 더 고민해보고 싶은 점은 중복 확인을 없애는 것!
  • for문을 1번만 사용하는 방법으로 풀어보고 싶다.
  • 방법을 찾아서 꼭 다시 업로드 하고싶다...그리고 그때 다른 사람들 코드도 확인하고 나와 다른점에 대해 올리겠다.. 그날이 얼른 오기를...
profile
자기소개가 싫어요

0개의 댓글