문제 출처: 백준 7568번 덩치

문제


스크린샷 2022-07-25 오후 4 27 35 스크린샷 2022-07-25 오후 4 27 50

풀이


모든 경우의 수를 비교하여 등수를 구하는 문제로 2중 반복문과 if 문을 이용해 풀어보았습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
struct Physical {
  /// 몸무게
    var m: Int
    /// 키
    var k: Int
}

/// 사람의 수
let n = Int(readLine()!)!
/// 몸무게와 키 배열
var arr = [Physical]()
/// 등수 배열
var result = Array(repeating: n, count: n)

// 입력받은 대로 arr배열에 삽입
for _ in 0..<n {
  let line = readLine()!.split(separator: " ").compactMap{ Int($0) }
  arr.append(Physical(m: line[0], k: line[1]))
}


for i in 0..<n - 1 {
  for j in i + 1..<n {
    if arr[i].k > arr[j].k && arr[i].m > arr[j].m {
      // 키와 몸무게 둘 다 큰 경우
      result[i] -= 1
    } else if arr[i].k < arr[j].k && arr[i].m < arr[j].m {
      // 둘 다 작은 경우
      result[j] -= 1
    } else {
      // 등수를 매길 수 없는 경우
      result[i] -= 1
      result[j] -= 1
    }
  }
}

// 결과 출력
for i in 0..<result.count {
  print(result[i], terminator: " ")
}
  1. 전체 사람의 수 n을 입력받습니다.
  2. 몸무게와 키를 n번 입력받아 구조체 형태로 배열에 저장합니다.
  3. 2중 반복문을 이용해 배열을 2개 요소를 전부 비교합니다.
  4. 키와 몸무게를 비교하여 등수를 조정합니다.

비교를 편하게 계산하려고 구조체를 이용했는데 생각해보니 튜플도 있었네요… 하하

이렇게 풀 경우 메모리: 69108 KB, 시간: 8 ms 결과가 나오게 됩니다.

업데이트:

댓글남기기