본문 바로가기

B/Coding Test

[코딩테스트] 완전탐색 - 모의고사 / 카펫

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

 

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

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

programmers.co.kr

무식해 보여도 사실은 최고의 방법일 때가 있지요.

 

 

def solution(answers):
    pattern1 = [1,2,3,4,5]
    pattern2 = [2,1,2,3,2,4,2,5]
    pattern3 = [3,3,1,1,2,2,4,4,5,5]
    score = [0, 0, 0]
    result = []

    for idx, answer in enumerate(answers):
        if answer == pattern1[idx%len(pattern1)]:
            score[0] += 1
        if answer == pattern2[idx%len(pattern2)]:
            score[1] += 1
        if answer == pattern3[idx%len(pattern3)]:
            score[2] += 1

    for idx, s in enumerate(score):
        if s == max(score):
            result.append(idx+1)

    return result​

나와 아이디어는 비슷한데, 패턴을 잡고 반복해서 굴려주는것이 아니라

나머지로 접근해서 스코어를 늘려가는 방식이 훨씬 효율적이었다.

 

[내 풀이]

def solution(answers):
    give_up_1 = [x+1 for x in range(5)]*(len(answers)//5+1)
    give_up_2 = [2, 1, 2, 3, 2, 4, 2, 5]*(len(answers)//8+1)
    give_up_3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]*(len(answers)//10+1)
    temp = []
    
    for gu in [give_up_1,give_up_2,give_up_3]:
        cnt = 0
        for idx,aw in enumerate(answers):
            if gu[idx] == aw:
                cnt +=1
        temp.append(cnt)
    
    rtn = []
    for e,tp in enumerate(temp):
        if tp == max(temp):
            rtn.append(e+1)
    return rtn

 

 

https://programmers.co.kr/learn/courses/30/lessons/42842?language=python3 

 

코딩테스트 연습 - 카펫

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과

programmers.co.kr

 

[내 풀이]

def solution(brown, yellow):
    for i in range(3, brown//2):
        for j in range(i):
            if 2*(i+j+1)-4 == brown and (i-2)*(j-1) == yellow:
                return [i,j+1]

타일 까는 원리를 가로, 세로에서 규칙을 찾아내서 if문으로 확인하는 식.

math 모듈에서 방정식 푸는 알고리즘을 사용할 수 도 있었을 거 같은데,

최대한 모듈 이용 없이 해보았다.

실제로 수학 풀때 곱하기는 항상 점이나 생략하기가 익숙해져서 int callable 오류가 났던 거 같음.