본문 바로가기

코딩테스트

[프로그래머스] 전국 대회 선발 고사 with golang

반응형

문제 설명
전국 대회 선발 문제는 다음과 같이 정의됩니다:

rank 배열은 각 학생의 선발 고사 등수를 담고 있습니다.
attendance 배열은 해당 학생이 전국 대회에 참가 가능한지 여부를 담고 있습니다.
선발할 수 있는 상위 3명의 학생 번호 (a, b, c)를 찾아서 10000 * a + 100 * b + c를 반환해야 합니다.
제한사항
3 ≤ rank의 길이 = attendance의 길이 ≤ 100
rank[i]는 i번 학생의 선발 고사 등수를 의미합니다.
rank의 원소는 1부터 n까지의 정수로 모두 서로 다릅니다.
attendance[i]는 i번 학생의 전국 대회 참석 가능 여부를 나타냅니다.
attendance[i]가 true라면 참석 가능, false면 참석 불가능을 의미합니다.
attendance의 원소 중 적어도 3개는 true입니다.

 

package main

import (
	"fmt"
	"sort"
)

func solution(rank []int, attendance []bool) int {
	rankMap := make(map[int]bool)
	rankIndex := make(map[int]int)
	top := []int{}
	for i, v := range rank {
		rankMap[v] = attendance[i]
		rankIndex[v] = i
	}

	for k, v := range rankMap {
		if v {
			top = append(top, k)
		}
	}
	sort.Ints(top)

	return (10000 * rankIndex[top[0]]) + (100 * rankIndex[top[1]]) + rankIndex[top[2]]
}

func main() {
	r := solution([]int{3, 7, 2, 5, 4, 6, 1}, []bool{false, true, true, true, true, false, false})
	fmt.Println(r)  // Output: 20403

	r = solution([]int{1, 2, 3}, []bool{true, true, true})
	fmt.Println(r)  // Output: 102

	r = solution([]int{6, 1, 5, 2, 3, 4}, []bool{true, false, true, false, false, true})
	fmt.Println(r)  // Output: 50200
}

 

코드 설명
rankMap과 rankIndex 두 개의 map을 만들어 각 학생의 등수와 전국 대회 참석 가능 여부, 그리고 학생 번호를 저장합니다.
top 슬라이스에 전국 대회에 참석 가능한 학생들의 등수를 저장합니다.
top 슬라이스를 정렬하여 가장 높은 등수부터 3명을 선택합니다.
선택된 3명의 학생 번호를 이용하여 10000 * a + 100 * b + c를 계산하여 반환합니다.

반응형