모의고사(완전탐색) [Swift

김형준·2023년 6월 8일
0

코딩문제

목록 보기
6/9
post-thumbnail

문제해결을 위한 공부내용
-for 반복문에 대한 깊은 이해
-제한조건인 (가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요)를 이해하기

나의 첫번째 답지(장문주의... 이거 생각하느라 2~3시간 문제만 쳐다봄)

func solution(_ answers:[Int]) -> [Int] {
    
    var student1: [Int] = [1,2,3,4,5]
    var student2: [Int] = [2,1,2,3,2,4,2,5]
    var student3: [Int] = [3,3,1,1,2,2,4,4,5,5]
    
    var studentCount:[Int] = [0,0,0]
    var result: [Int] = []
    
    for i in 0..<answers.count{
     
        if answers[i] == student1[i % 5] { //  student1 배열 반복을 위해서 [i % 5]
            
            studentCount[0] += 1
            
            if answers[i] == student2[i % 8] { //첫번째 if 문이 가장 힘들었다
                
                studentCount[1] += 1  // 만약 student1과 같으면 student2와도 같은지 봐야함
                
                if answers[i] == student3[i % 10] { //만약 student2와 같으면 student 3과 같은지 봐야함
                    
                    studentCount[2] += 1 }
                
            } else if answers[i] == student3[i % 10] { // 만약 student2와는 같지 않지만 student 3과 같은지 봐야함
                
                studentCount[2] += 1 }
                
        } else if answers[i] == student2[i % 8] {
            studentCount[1] += 1
            
            if answers[i] == student3[i % 10] {
                studentCount[2] += 1 }
            
        } else if answers[i] == student3[i % 10] {
            
            studentCount[2] += 1
            
        }}

    for i in 0..<studentCount.count {
       
        if  studentCount.sorted(by: >)[0] == studentCount[i] {
            result += [i+1]
            // 이거 고민하느라 꽤 힘듬. 각 카운트 올라간게 서로 중복되면 같이 출력해야해서..
            //[0,0,0]에서 가장 카운트 높은 순서대로 나열 후에 [0]인 가장 첫번째만 sort함
            //그리고 각 studentCount[i] 의 숫자가 가장 높은 수와 같으면
            // result 새로운 배열에 [i+1]
        }
    }
    
    return result
}

정리한 최종 문제풀이

func solution(_ answers:[Int]) -> [Int] {
    var student1: [Int] = [1,2,3,4,5]
    var student2: [Int] = [2,1,2,3,2,4,2,5]
    var student3: [Int] = [3,3,1,1,2,2,4,4,5,5]
    
    var studentCount:[Int] = [0,0,0]
    var result: [Int] = []
    
    for i in 0..<answers.count{
        // if else 를 안해도 됨을 알게되어 버렸다...하 ~.~ 정말 바보
        if answers[i] == student1[i % 5] { studentCount[0] += 1}
        if answers[i] == student2[i % 8] { studentCount[1] += 1}
        if answers[i] == student3[i % 10]{ studentCount[2] += 1}
         }
    
    for i in 0..<studentCount.count {
        if studentCount.sorted(by: >)[0] == studentCount[i] {
            result += [i+1] }
        }
    return result}

결국 첫번째 답지가 길었던 이유는
if else로 모든 처리를 안해도 됨을 알게되어 버렸다는 것.....하 ~.~ 정말 바보

생각보다 쉽다 생각했는데 중간중간 생각할게 너무 많았다
아직 알고리즘 공부를 시작하지 않았어서 그런지...
완전탐색 쉽게 봤다가 몇시간 잡아먹음 ㅠㅠ...

고수들은 역시 쉽게 푼다..
하지만 최대시간이 내가 더 낮아서 만족하는 걸로^^

profile
기억보단 기록, 느리더라도 꾸준히

0개의 댓글