본문 바로가기
Algorithm/문제풀이

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

by devdevdev 2021. 4. 15.

1. k번째 약수

#import sys
#sys.stdin=open("input.txt","rt")
#n=input()
#a = int(n.split(" ")[0])
#b = int(n.split(" ")[1])

#count = 0
#result = -1
#for i in range(1,a+1):
     
#    if a%i==0:
#        count+=1
#    if count==b:
#        result = i
#        break

#print(result)       
        


# 풀이
import sys
#sys.stdin = open("input.txt", "rt")
n, k = map(int, input().split())

cnt = 0
for i in range(1, n+1):
    if n % i == 0:
        cnt+=1
    if cnt == k:
        print(i)
        break
else:
    print(-1)

2. k번째 수

import sys

#sys.stdin = open("in1.txt", "rt")
T = int(input())


for t in range(T):
    n, s, e, k = map(int, input().split())
    a = list(map(int, input().split()))
    a = a[s-1:e]
    a.sort()
    print("#%d %d" %(t+1, a[k-1]))

 

3. k번째 큰 수

import sys

#sys.stdin = open("in1.txt", "rt")

N, k = map(int, input().split())

numList = list(map(int, input().split()))

res = set()


for i in range(0,N):
    for j in range(i+1,N):
        for p in range(j+1,N):
            res.add(numList[i]+numList[j]+numList[p])
res=list(res)            
res.sort(reverse=True)
print(res[k-1])
 

4. 대표값

import sys

#sys.stdin = open("in1.txt","rt")

n = int(input())
list = list(map(int,input().split()))
avg = round(sum(list)/n)



min = 2147000000
for idx, x in enumerate(list):
    tmp = abs(x-avg)
    if tmp<min:
        min = tmp
        score = x
        res = idx+1
    elif tmp == min and score < x:
        score = x
        res = idx+1
print("%d %d" %(avg, res))

5. 정다면체

#정다면체

import sys
#sys.stdin = open("in1.txt", 'rt')

n,m = map(int, input().split())

sum = {}

# 딕셔너리 만들기
for i in range(1,n+1):
    for k in range(1,m+1):
        sum[i+k] = 0
        
# 정다면체 합 기록하기              
for i in range(1,n+1):
    for k in range(1,m+1):
        sum[i+k] = sum[i+k]+1

# 가장 높은 확률의 합 찾기
max = 0
valueList = list(sum.values())

for i in range(len(valueList)-1):
    for k in range(1,len(valueList)):
        if(max < valueList[k]):
            max = valueList[k]


# 결과
for i in sum:
    if sum[i] == max: 
        print(i, end=' ')

6. 자릿수의 합

# 자릿수의 합
import sys

sys.stdin = open("in1.txt","rt")

# 1. 입력
n = int(input())
numList = list(map(int, input().split()))

# 2. 합계산 함수 정의
def digit_sum(x):
    xList = list(map(int, str(x)))
    return sum(xList)

# 3. 가장 큰 합과 그 수 프린트하기
maxSum = 0
#maxNum = numList[0]
for i in numList:
    numSum = digit_sum(i)
    if  numSum > maxSum:
        maxSum = numSum
        maxNum = i

print(maxNum)

7. 소수(에라토스테네스 체)

# 소수
import sys

#sys.stdin = open("in2.txt","rt")

n = int(input())




# 1. 리스트 만들기
numList = [0]*(n+1)


# 2. 반복문 돌면서 소수 찾아내기
count = 0
for i in range(2,n+1):
    if numList[i] == 0:
        count+=1
        for k in range(i,n+1, i):
            numList[k] = 1


print(count)

8. 뒤집은 소수

# 뒤집은 소수
import sys

#sys.stdin = open("in3.txt", "rt")

# 1. 입력
n = int(input())
numList = list(map(int, input().split()))

# 2. 뒤집기 함수
def reverse(x):
    xList = list(map(int, str(x)))
    result = ''
    for i in range(len(xList)-1,-1,-1):
        result = result + str(xList[i]) 
    return  int(result)    

# 3. 소수판별 함수
def isPrime(x):
    isP = True
    for i in range(2,x):
        if x % i == 0:
            isP = False
            break

    if(x == 1):
        isP = False
    return isP

# 4. 소수출력
for i in numList:
    
    if(isPrime(reverse(i))):
        print(reverse(i), end=' ')



9. 주사위 게임

# 주사위 게임

import sys

#sys.stdin = open("in1.txt","rt")

n = int(input())

max = 0

  

def calPrice(flag, value):
    if(flag == 1):
        return value * 100
    elif(flag == 2):
        return 1000 + value * 100
    else:
        return 10000 + value * 1000


for i in range(n):
    diceList = list(map(int, input().split()))
    flag = 1
    value = diceList[0]
    if(diceList[0]==diceList[1]):
        flag+=1
    if(diceList[0]==diceList[2]):    
        flag+=1       
    if(diceList[1]==diceList[2]):
        flag+=1
        value = diceList[1]

    result = calPrice(flag, value)

    if(max < result):
        max = result

print(max)        
     

10. 점수 계산

# 점수계산

#1. flag 변수로 이전값이 1이었는지 확인한다.
#2. 해당값이 1이라면 flag = true를 주고, count++한다

import sys

#sys.stdin = open("in1.txt","rt")

n = int(input())

oxList = input().split()

flag = False
count = 1
res = 0
for i in oxList:
    
    if i=='1' and flag:
        count+=1
        res+=count
        flag = True
    elif i=='1' and flag==False:
        count=1
        res+=count
        flag = True
    else:
        count=1
        flag = False
        

print(res)

#print(oxList)

 

 

 

 

728x90

댓글