데이터분석/TIL

240716 TIL

Freely_ 2024. 7. 16. 20:45
728x90
반응형
  • 문제

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

1번 수포자가 찍는 방식: 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...
2번 수포자가 찍는 방식: 2, 1, 2, 3, 2, 4, 2, 5, 2, 1, 2, 3, 2, 4, 2, 5, ...
3번 수포자가 찍는 방식: 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...

1번 문제부터 마지막 문제까지의 정답이 순서대로 들은 배열 answers가 주어졌을 때, 가장 많은 문제를 맞힌 사람이 누구인지 배열에 담아 return 하도록 solution 함수를 작성해주세요.

 

  • 제한 조건

시험은 최대 10,000 문제로 구성되어있습니다.
문제의 정답은 1, 2, 3, 4, 5중 하나입니다.
가장 높은 점수를 받은 사람이 여럿일 경우, return하는 값을 오름차순 정렬해주세요.

 

  • 풀이
def solution(answers):
    answer = []
    a = [1,2,3,4,5]
    b = [2,1,2,3,2,4,2,5]
    c = [3,3,1,1,2,2,4,4,5,5]
    score = [0, 0, 0]
    for i in range(len(answers)):
        if answers[i] == a[i%5]:
            score[0] += 1
        if answers[i] == b[i%8]:
            score[1] += 1
        if answers[i] == c[i%10]:
            score[2] += 1
            
    for i in range(len(score)):
        if score[i] == max(score):
            answer.append(i+1)
    return answer

  • 문제

주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.

 

  • 제한 조건

nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.
nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.

 

  • 풀이
def solution(nums):
    answer = 0
    for i in range(len(nums)):
        for j in range(i+1, len(nums)):
            for k in range(j+1, len(nums)):
                sum_nums = nums[i]+nums[j]+nums[k]
                check = 0
                for p in range(1, sum_nums+1):
                    if sum_nums % p == 0:
                        check += 1
                    if check > 2:
                        break
                if check == 2:
                    answer += 1
    return answer

  • 문제

PATIENT 테이블
DOCTOR 테이블
APPOINTMENT 테이블

PATIENT, DOCTOR 그리고 APPOINTMENT 테이블에서 2022년 4월 13일 취소되지 않은 흉부외과(CS) 진료 예약 내역을 조회하는 SQL문을 작성해주세요. 진료예약번호, 환자이름, 환자번호, 진료과코드, 의사이름, 진료예약일시 항목이 출력되도록 작성해주세요. 결과는 진료예약일시를 기준으로 오름차순 정렬해주세요.

  • 풀이
SELECT y.apnt_no, y.pt_name, y.pt_no, y.mcdp_cd, x.dr_name, y.apnt_ymd
FROM doctor x
INNER JOIN (SELECT b.apnt_no, a.pt_name, a.pt_no, b.mcdp_cd, b.apnt_ymd, b.mddr_id
            FROM patient a
            INNER JOIN (SELECT apnt_ymd, apnt_no, pt_no, mcdp_cd, mddr_id
                        FROM appointment
                        WHERE apnt_ymd like '2022-04-13%' and mcdp_cd = 'cs'and apnt_cncl_yn = 'n') b
            ON a.pt_no=b.pt_no) y
ON x.dr_id=y.mddr_id
ORDER BY y.apnt_ymd

  • 문제

1부터 13까지의 수에서, 1은 1, 10, 11, 12, 13 이렇게 총 6번 등장합니다. 정수 i, j, k가 매개변수로 주어질 때, i부터 j까지 k가 몇 번 등장하는지 return 하도록 solution 함수를 완성해주세요.

 

  • 제한 사항

1 ≤ i < j ≤ 100,000
0 ≤ k ≤ 9

 

  • 풀이
def solution(i, j, k):
    answer = 0
    for x in range(i, j+1):
        for y in str(x):
            if y == str(k):
                answer += 1
    return answer

 

def solution(i, j, k):
    answer = 0
    for x in range(i, j+1):
        answer += str(x).count(str(k))
    return answer

count 매서드 사용


  • 문제

외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.

 

  • 제한 사항

중복된 원소는 없습니다.
1 ≤ emergency의 길이 ≤ 10
1 ≤ emergency의 원소 ≤ 100

 

  • 풀이
def solution(emergency):
    answer = []
    er = sorted(emergency, reverse = True)
    for i in emergency:
        answer.append(er.index(i)+1)
    return answer

  • 문제

머쓱이는 친구에게 모스부호를 이용한 편지를 받았습니다. 그냥은 읽을 수 없어 이를 해독하는 프로그램을 만들려고 합니다. 문자열 letter가 매개변수로 주어질 때, letter를 영어 소문자로 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.
모스부호는 다음과 같습니다.

morse = { 
    '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
    '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
    '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
    '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
    '-.--':'y','--..':'z'
}

 

  • 제한 사항

1 ≤ letter의 길이 ≤ 1,000
return값은 소문자입니다.
letter의 모스부호는 공백으로 나누어져 있습니다.
letter에 공백은 연속으로 두 개 이상 존재하지 않습니다.
해독할 수 없는 편지는 주어지지 않습니다.
편지의 시작과 끝에는 공백이 없습니다.

 

  • 풀이
def solution(letter):
    answer = ''
    morse = { 
    '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
    '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
    '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
    '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
    '-.--':'y','--..':'z'
}
    for i in letter.split():
        if i in morse:
            answer += morse[i]
    return answer
728x90
반응형