Python/Python 코테 준비

[섹션 2] #1 - #5

안정민 2024. 1. 5. 03:16

문제 파일

섹션 2. 코드 구현능력 기르기.pdf
0.07MB


#1 k번째 약수

def find_kth_divisor(divisor_list, n, k):
    for i in range(1,n+1):
        if(n%i==0):
            divisor_list.append(i)
        else:
            continue

    print(divisor_list[k-1])

divisor_list=[]

while True:
    line=input()
    firstline=line.split(' ')
    #split 메소드는 매개변수로 전달받은 문자를 구분자로 문자열을 분리시켜 리스트로 반환한다
    n=int(firstline[0])
    k=int(firstline[1])

    if(n>1 and n<10000 and k>1 and k<n):
        find_kth_divisor(divisor_list, n, k)
        break
    else:
        print("Wrong input, out of range. Input again.")
        continue

#2 k번째 수

def kth_num():
    line=input()
    firstline=line.split(' ')
    n=int(firstline[0])
    s=int(firstline[1])
    e=int(firstline[2])
    k=int(firstline[3])
    line=input()
    num_list=line.split(' ')
    intarr = list(map(int, num_list))
    intarr=intarr[s-1:e]
    intarr.sort()


    print('#', i+1, " ", intarr[k-1])


test_num=int(input())

for i in range(test_num):
    kth_num()

#3 k번째 큰 수

line=input()
firstline=line.split(' ')
n=int(firstline[0])
k=int(firstline[1])

line=input()
num_list=list(map(int, line.split()))

set_for_removing=set(num_list)
#set로 변환시켜 중복 값 제거
#set자료형은 인덱스 접근이 불가능하기 때문에 중복값 제거 후 다시 리스트로 변환 후 정렬하고 인덱스 접근
new_list=sorted(list(set_for_removing), reverse=True)
print(new_list[k-1])

**set 자료형 활용


#4 대표값

student_num=int(input())
line=input()
student_score_list=list(map(int, line.split()))

data_sum=0
for i in student_score_list:
    data_sum=i
#올림 함수
score_average=round(data_sum/student_num, 0)

score_abs_list=[]
for i in range(len(student_score_list)):
    score_abs_list.append(abs(student_score_list[i]-score_average))

closest_dict={}
index_list=[]
while(min(score_abs_list) in score_abs_list):
    x=score_abs_list.index(min(score_abs_list))
    #딕셔너리 형태로 학생번호(인덱스):성적 의 딕셔너리 페어 저장
    closest_dict[x]=student_score_list[x]
    index_list.append(x)
    score_abs_list[x]=-1

if len(closest_dict)==1:
    print(score_average, closest_dict[0])
else:
    chosen_student_score=0
    for i in index_list:
        if closest_dict.get(i) > chosen_student_score:
            chosen_student_score=closest_dict.get(i)
        #점수가 같은 경우 학생 번호가 빠른 학생이 답이 되므로 값 변경 없이 continue로 수렴되기 때문에 밑에 코드로 흡수된다
        else:
            continue
    print(score_average, chosen_student_score)

이렇게 했었는데 안 돌아감........

 


#5 다면체 합 빈도수

def platonic_solid_test(n, m):
    original_sum_dict={}
    for i in range(1,n+1):
        for j in range(1,m+1):
            if (i+j) in original_sum_dict:
                original_sum_dict[i+j]=original_sum_dict[i+j]+1
            else:
                original_sum_dict[i+j]=1

    max_frequency=max(original_sum_dict.values())

    max_fre_keys=[]
    for key, value in original_sum_dict.items():
        if value==max_frequency:
            max_fre_keys.append(key)

    for i in max_fre_keys:
        print(i, end=' ')


Platonic_solid_list=[4, 6, 8, 12, 20]
line=input()
input_list=list(map(int, line.split()))
n=input_list[0]
m=input_list[1]

if(n in Platonic_solid_list and m in Platonic_solid_list):
    platonic_solid_test(n, m)
else:
    print("Wrong input.")