• 1. K번째 약수 구하기
# 1. 환경설정 및 K번째 약수 풀이
# 자연수 N, K번째로 작은 수
N, K = map(int, input().split()) 
a = [] # 리스트 생성

# 약수 구하기 : 1부터 N까지 나누었을 때 
for i in range(1, N+1):
    a.append(int(N//i))
    
    
# 약수 중복 제거 
newList = list(set(a))
if len(newList) < K: # 약수 개수가 K보다 작은 경우 -1
    print(-1)
else:
    newList.sort() # 약수 오름차순 정렬
    print(newList[K-1]) # K번쨰 값 출력

 

  • 2. K번째 수
# 2. K번째 수
N,s,e,k = 6,2,5,3
array1 = [5, 2, 7, 3, 8, 9]
newArray1 = array1[s-1:e] # 2 7 3 8 
newArray1.sort() # 오름차순
print(newArray1[k-1]) # K번째 수 출력

 

  • 3. K번째 큰 수
# 3. K 번째 큰 수
N, K = 10, 3 # 자연수 N, K 번째 수
arr = [13,15,34,23,45,65,33,11,26,42]
# arr = list(map(int, input().split()))
res = set() # 중복 제거 set 사용

# 3개씩 뽑아서 더하기
for a in range(N):
    for b in range(a+1, N):
        for c in range(b+1, N):
            res.add(arr[a]+arr[b]+arr[c])
res = list(res)
# 내림차순 정렬
res.sort(reverse=True)
# K 번째 수 구하기
print(res[K-1])

 

  • 4. 대표값
  • 반올림 구하기 round 대신 int(a+0.5) 
# 4. 대표값 - 평균에 가까운 수 구하기
N = 10
arr = [65, 73, 66, 87, 92, 67, 55, 79, 75, 80]
avg = sum(arr)//10
min = float('inf')
resIdx = 0

# enumerate을 사용하면 배열의 idx, val - 인덱스, 값 반환
for idx, val in enumerate(arr):
    dff = round(abs(avg-val))
    if min > dff:
        min = dff
        resIdx = idx
    elif min == dff and arr[resIdx] < val:
        resIdx = idx
print(round(avg), resIdx+1)

# round 반올림 오류
# round_half_even 방식 사용 -> 0.5 인 경우, 0 반환
# round 대신 0.5를 더해주고 int()를 사용
a = 66.5
print(a)
a = a+0.5
print(int(a))

 

  • 5. 정다면체
# 5. 정다면체 - 두개의 정다면체의 값을 더할 때 가장 확률 높은 값 구하기
N, M = 4,6
arr = [0]*(N+M) # 최대값은 N+M

for i in range(1, N+1):
    for j in range(1, M+1):
        # 각 수에 cnt++ 
        arr[i+j-1] = arr[i+j-1] + 1

max = max(arr)

for idx, val in enumerate(arr):
    if max == val:
        print(idx+1, end=' ')

 

  • 6. 자릿수의 합
# 6. 자릿수의 합 - 각 자릿수의 합을 구하고 가장 높은 자연수 출력
N = 3
arr = [125, 15232, 97]
max, maxVal = 0, 0

def digit_sum(x): # 자릿수 구하기 함수
    sum = 0
    while x > 0:
        sum = sum + int(x % 10)
        x = x/10
    return sum

for i in arr: # 자릿수의 최대값 구하기
    tmp = digit_sum(i)
    if max < tmp:
        max = tmp
        maxVal = i
print(maxVal)

 

  • 7. 소수 - 에라토스테네스의 체
  • 소수 개수 구하기
# 7. 소수 - 에라토스테네스의 체
# 소수 개수 구하기
N = 20
arr = [0]*(N+1)
cnt = 0

# 1은 소수가 아니다.
for i in range(2, N+1):
    if arr[i] == 0: # 배열의 값이 0 인 경우 = 소수
        cnt = cnt + 1
        # 소수의 배수는 1로 체크
    for j in range(i, N+1, i):
        arr[j] = 1
print(cnt)

 

  • 8. 뒤집은 소수
# 8. 뒤집은 소수 - 자연수를 뒤집은 값이 소수일 경우 출력
N = 5
arr = [32, 55, 62, 3700, 250]

def reverse_num(num):
    res = 0
    while num > 0:
        tmp = int(num % 10)
        res = res*10+tmp
        num = num//10
    return res

def isPrime(num):
    if num == 1:
        return False
    for x in range(2, num):
        if num % x == 0:
            return False
    return True

for x in arr:
    reverse = reverse_num(x)
    if isPrime(reverse):
        print(reverse, end=' ')

 

 

  • 소수 구하기 알고리즘 - 제곱근 사용
def isPrime(num):
    if num == 1:
        return False
    for x in range(2, int(math.sqrt(num) + 1)):
        if num % x == 0:
            return False
    return True

 

 

  • 9. 주사위 게임 
# 9. 주사위 게임 
# 3개의 주사위를 각 규칙에 맞게 계산하고, 가장 최대값 출력
N = 3
arr = [[3, 3, 6], [2, 2, 2], [6, 2, 5]]
maxRes = 0

for i in range(len(arr)):
    count = 0
    value = 0
    maxCnt = 0
    for j in range(len(arr)):
        if value == arr[i][j]:
            count = count+1
        else:
            maxCnt = max(count, maxCnt)
            count = 1
            value = arr[i][j]
        if j+1 == len(arr):
            maxCnt = max(count, maxCnt)
    if maxCnt == 3: # 규칙 1(같은 눈3개)
        reward = 10000+(value*1000)
    elif maxCnt == 2: # 규칙 2(같은 눈2개)
        reward = 1000+(value*100)
    else: # 규칙 3(같은 눈X)
        reward = max(list(arr[i]))*100
    maxRes = max(maxRes, reward)
print(maxRes)

 

  • 10. 점수 계산
# 10. 점수 계산 - OX 퀴즈 연속답 가산점 계산
N = 10
arr = [1, 0, 1, 1, 1, 0, 0, 1, 1, 0]
subSum = 0
score = 0

for i in arr:
    if i == 0:
        subSum = 0
    else:
        subSum = subSum+1
        score = score + subSum
print(score)

 

+ Recent posts