[코테 준비 : day04]

Choi·2023년 6월 25일
0

코딩테스트 준비

목록 보기
4/22

keep going!

오늘도 하는 코테 준비.. 기억에 남는 다섯문제만 기록해보겠다!

  1. 로또의 최고 순위와 최저 순위
    https://school.programmers.co.kr/learn/courses/30/lessons/77484

동생이 로또에 낙서를 하여 숫자가 잘 보이지않는다. 그래서 0으로 표시해두고 로또 최고 순위와 최저 순위를 예측해보자. 문제 해결 방식은 먼저 0을 세는 것이다. 그리고 로또 번호와 당첨번호를 비교하여 카운트. 등수를 딕셔너리 형태로 만들어놓고 매치시킬 것!

def solution(lottos, win_nums):
    answer = []
    cnt=0
    zero_cnt=lottos.count(0)
    for i in lottos:
        if i in win_nums:
            cnt+=1
            print(cnt)
    max=zero_cnt+cnt
    rank = {6:1,5:2,4:3,3:4,2:5,1:6,0:6} # 순위와 당첨 내용 딕셔너리
    answer = [rank[max],rank[cnt]]
    
    return answer

2.모의고사
https://school.programmers.co.kr/learn/courses/30/lessons/42840

세 명의 친구는 모두 수포자이다. 수학 시험에 앞서 어떻게 찍을 지 패턴을 만들어두었다. 가장 높은 점수를 받는 사람은 누구인가. 문제 해결 방식은 각 학생별로 패턴을 정의하고 답안을 순회하며 채점!

def solution(answers):
    
    answer = []
    score = [0,0,0]
    
    student1 = [1,2,3,4,5]
    student2 = [2,1,2,3,2,4,2,5]
    student3 = [3,3,1,1,2,2,4,4,5,5]
    
    for i in range(len(answers)) :
        if answers[i] == student1[i%5] :
            score[0] += 1
        if answers[i] == student2[i%8] :
            score[1] += 1
        if answers[i] == student3[i%10] :
            score[2] += 1
        
    for idx, num in enumerate(score) :
        if num == max(score) :
            answer.append(idx +1)
    
    return answer

3.소수 만들기
https://school.programmers.co.kr/learn/courses/30/lessons/12977

주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 수를 구하라! 이런 문제는 바로 콤비네이션을 떠올려야한다. 그러면 간단하게 해결 가능!

from itertools import combinations

def solution(nums):
    answer = 0
    for i in combinations(nums, 3):
        s = sum(i)
        chk = True
        for j in range(2, int(s ** 0.5) + 1):
            if s % j == 0:
                chk = False
                break
        if chk is True:
            answer += 1
    return answer

4.다트게임
https://school.programmers.co.kr/learn/courses/30/lessons/17682

2018 카카오 블라인드 채용 문제다. 완전 탐색 문제로 점수를 계산하는 로직을 짜야한다. 각 케이스별로 점수 계산을 달리할 것!

def solution(dartResult):
    n = ''
    score = []
    for i in dartResult:
        if i.isnumeric():
            n += i
        elif i == 'S':
            n = int(n)**1
            score.append(n)
            n = ''
        elif i == 'D':
            n = int(n)**2
            score.append(n)
            n = ''
        elif i == 'T':
            n = int(n)**3
            score.append(n)
            n = ''
        elif i == '*':
            if len(score) > 1:
                score[-2] = score[-2] * 2
                score[-1] = score[-1] * 2
            else:
                score[-1] = score[-1] * 2
        elif i == '#':
            score[-1] = score[-1] * -1
        
    return sum(score)

5.2016년
https://school.programmers.co.kr/learn/courses/30/lessons/12901

날짜가 주어질 때 요일을 맞출 것!배열로 만들어두어 매칭!

def solution(a, b):
    answer = 0
    days = ['FRI','SAT','SUN','MON','TUE','WED','THU']
    months = [31, 29, 31, 30, 31, 30,31, 31, 30, 31, 30, 31]
    
    for i in range(a-1):
      answer += months[i]
    
    answer += b-1
    answer = answer%7
    
    return days[answer]
profile
느려도 내 것으로 만드는게 좋잖아?

0개의 댓글