본문 바로가기
Algorithm/문제풀이_프로그래머스

[Swift][프로그래머스][완전탐색] 모의고사

by Joahnee 2022. 4. 18.

요구능력

완전탐색, 딕셔너리

 

문제풀이

문제를 보면 수포자의 명수와 수포자가 문제를 찍는 정답수를 가르쳐준다.

그래서 one, two, three로 반복되지 않는 정답을 적어줬고,

dictionary를 활용해서 각자 정답을 얼마나 맞췄는지를 기록해줬다.

 

index가 0부터 시작하니까 각자 개수에 따라서 나머지연산을 해준다면 아무리 answers의 수가 많아져도 계속해서 정답을 맞춰볼 수 있다.

예를들어서 1번 수포자(one)의 경우 [1, 2, 3, 4, 5] 총 5개라서 index는 0 ~ 4이다.

이걸 %5 해주게되면 index가 5일 때는 0이고 6 일 때는 1이된다.

이런식으로 계속해서 정답을 맞춰볼 수 있다.

 

그리고 이 dictionary의 value값들 중 최대값이 결국 가장 많이 맞힌 수 일 것이다.

이 최대값을 이용해서 가장 많이 맞힌 사람들을 찾아주고 result배열에 추가해줬다.

 

 

참고 ))

for i in dict.keys{
        if dict[i] == good{
            if i == "1"{
                result.append(1)
            }else if i == "2"{
                result.append(2)
            }else{
                result.append(3)
            }
            
        }
    }

이것은 정답이 된다.

하지만,

for i in dict.keys{
        if dict[i] == good{
            result.append(Int(i)!)
            
        }
    }

이건 정답이 안되더라.

테스트 13번에서 런타임에러가 발생한다.

 

혹시 이유를 아신다면 댓글로 알려주시면 감사하겠습니다ㅠㅠ

 

후기

레벨1정도면 백준 실버 3정도는 되는거같다.

코드

func solution(_ answers:[Int]) -> [Int] {
    let one = [1, 2, 3, 4, 5]
    let two = [2, 1, 2, 3, 2, 4, 2, 5]
    let three = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]
    
    var dict = [String:Int]()
    dict["1"] = 0
    dict["2"] = 0
    dict["3"] = 0
    
    for i in 0..<answers.count{
        if one[i % 5] == answers[i]{
            dict["1"]! += 1
        }
        
        if two[i % 8] == answers[i]{
            dict["2"]! += 1
        }
    
        if three[i % 10] == answers[i]{
            dict["3"]! += 1
        }
    }
    var result = [Int]()
    let good = dict.values.max()!
    
    for i in dict.keys{
        if dict[i] == good{
            if i == "1"{
                result.append(1)
            }else if i == "2"{
                result.append(2)
            }else{
                result.append(3)
            }
            
        }
    }
    
    result.sort()
    return result
}

댓글