programmers.co.kr/learn/courses/30/lessons/42840

 

코딩테스트 연습 - 모의고사

수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는

programmers.co.kr

이 글을 쓰면서 전체 라인수를 좀 줄여보고자 변경했는데도 라인수가 좀 크다.

저 사이트는 다른이의 답도 볼 수 있는 서비스를 제공하는데 보고 오니 정말 내 소스가 좀 부끄러워진다.

 

 

 

이번 문제는 배열의 탐색을 묻는 문제인가 싶다.

세명의 사람이 있고 

첫번째 사람은 1,2,3,4,5 ... 1,2,3,4,5 순으로 답을 적고

이런식으로 세명의 정답 적는 배열이 주어진다.

 

세명의 점수를 정답 배열에서 계속 비교해야해서 

해당 내용을 난 TestPaper라는 구조체를 만들어 정리했다.

 

그 후 각각의 총점을 계산하고

각각의 점수를 기준으로 정렬하고 가장 앞에 있는 사람을 뽑는것으로 톱을 정하고

혹시 톱과 같은 점수가 있는지 filter함수를 통해 사람을 추가로 뽑았다.

  struct TestPaper {
    let id:Int
    private let loopAnsers:[Int]
    private var loopIndex:Int = 0
    var score = 0
    var answer: Int {
      mutating get {
        let index = loopIndex
        self.loopIndex += 1
        if loopIndex >= loopAnsers.count { self.loopIndex = 0 }
        return self.loopAnsers[index]
      }
    }
    
    init(id:Int,loopAnsers:[Int]) {
      self.id = id
      self.loopAnsers = loopAnsers
    }
  }
  
  func solution(_ answers:[Int]) -> [Int] {
    var people:[TestPaper] = [
      TestPaper(id: 1, loopAnsers: [1,2,3,4,5]),
      TestPaper(id: 2, loopAnsers: [2,1,2,3,2,4,2,5]),
      TestPaper(id: 3, loopAnsers: [3,3,1,1,2,2,4,4,5,5])
    ]
    // calc score
    for answer in answers {
      for index in 0 ..< people.count {
        if answer == people[index].answer {
          people[index].score += 1
        }
      }
    }
    
    // get top
    let top = people.sorted(by: {$0.score > $1.score}).first!
    
    // get result
    var result = [Int]()
    for person in people.filter({ $0.score == top.score}) {
      result.append(person.id)
    }
    return result
  }

중간에 그냥 주석으로 때워도 될부분이 생각나지 않아 이번편은 모든 부분을 소스로 올렸다.

 

아래 링크로 가면 전체 클래스를 볼 수 있다

 

github.com/wiwi-git/Programmers-learn/blob/master/swift/Practice/Practice/MockTest.swift

 

wiwi-git/Programmers-learn

Contribute to wiwi-git/Programmers-learn development by creating an account on GitHub.

github.com

 

+ Recent posts