일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 재귀
- ftz
- 파일 시스템
- Java
- HTML
- 암호수학
- 스택
- 백준
- 정렬 알고리즘
- 미로 탐색 알고리즘
- windosws wbcs
- PHP
- c언어
- ftz level13
- SWiFT
- C
- 파이썬
- pwnable.kr
- OSI
- 두근두근 자료구조
- 시간복잡도
- 큐
- Stack
- System
- level13
- LoB
- War Game
- windosw 문자열
- 자료구조
- web
Archives
- Today
- Total
나의 기록, 현진록
[Swift] 프로그래머스 2019 KAKAO BLIND RECRUITMENT > 실패율 본문
Programming/Algorithm & Data Structure
[Swift] 프로그래머스 2019 KAKAO BLIND RECRUITMENT > 실패율
guswlsdk 2022. 7. 19. 13:58반응형
문제풀이
- 실패율을 저장할 스테이지 튜플 배열 생성 [(스테이지 번호, 실패율)]
- 현재 스테이지 클리어한 사람 구하기
- 현재 스테이지인 사람 구하기 = 전체 스테이지 수에서 현재 스테이지 클리어한 사람 빼기
- 실패율(스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수) 구해서 튜플 배열에 추가
- 스테이지 번호를 실패율 내림차순으로 정렬한다. 만약 실패율이 같으면 스테이지 번호가 낮은 게 우선순위이다.
코드
처음 작성한 정답 제출 시 5, 9, 22번이 시간초과가 발생하였다.
import Foundation
func solution(_ N:Int, _ stages:[Int]) -> [Int] {
var stageArr: [[Float]] = Array(repeating: Array(repeating: 0, count: 0), count: N+1)
for i in 1..<stageArr.count{
stageArr[i].append(Float(i))
stageArr[i].append(Float(stages.filter{ $0 == i }.count))
stageArr[i].append(Float(stages.filter{$0 >= i}.count))
stageArr[i].append(stageArr[i][1]/stageArr[i][2])
}
stageArr[1..<stageArr.count].sort{$0[3] > $1[3]}
return stageArr[1..<stageArr.count].map{Int($0[0])}
}
현재 스테이지에서 멈춘 사람 수 stages.filter{$0 == i}
현재 스테이지를 이미 클리어에 도달한 사람의 수 stages.fliter{$0 >= i}는 굳이 배열에 안 넣어도 되긴하다...
다른 사람들의 코드를 좀 찾아보았고 원인은 크게 두가지였다.
1. 이차원 배열을 굳이 사용하지 않아도 됨 -> 보다 간단한 자료구조를 이용해서 시간을 단축시키기
2. filter말고 for문을 사용하여 시간을 단축시키기
이차원 배열을 튜플배열로 바꾸고, filter 말고 for문을 사용하도록 바꾸자. 그러나 이것만 바꿔서 해결되지 않았다.
전체 스테이지 수에서 현재 스테이지에 도달했으나 클리어하지 못한 사람의 수를 빼면 스테이지를 이미 도달한 사람의 수가 나온다.
즉, stages.fliter{$0 >= i}는 없어도 된다. 이 문장이 속도를 절반가까이 줄여주었다.
import Foundation
func solution(_ N:Int, _ stages:[Int]) -> [Int] {
var stageArr = [(Int,Float)]()
var player = stages.count
for i in 1...N{
var clear = 0
for item in stages{
if i == item{
clear += 1
}
}
player -= clear
stageArr.append((i, Float(clear)/Float(player)))
}
stageArr.sort{$0.1 > $1.1}
return stageArr.map{$0.0}
}
반응형
'Programming > Algorithm & Data Structure' 카테고리의 다른 글
[Swift] 프로그래머스 코딩테스트 연습 > 2018 KAKAO BLIND RECRUITMENT [1차] 뉴스 클러스터링 (0) | 2022.08.23 |
---|---|
[Swift] 프로그래머스 2021 KAKAO BLIND RECRUITMENT > 메뉴 리뉴얼 (0) | 2022.08.09 |
[Swift] 프로그래머스 2020 카카오 인턴십 > 키패드 누르기 (0) | 2022.07.07 |
[Swift] 프로그래머스 2021 카카오 채용연계형 인턴십 > 숫자 문자열과 영단어 (0) | 2022.07.05 |
[Swift] 프로그래머스 2021 KAKAO BLIND RECRUITMENT > 신규 아이디 추천 (0) | 2022.07.04 |