sec02(1-5).코드 구현력 기르기
sec02-1번 k번째 약수구하기➿
import sys
sys.stdin = open("input.txt", "rt")
#input파일에 있는 수가 띄워져서 들어오기 때문에 map으로 읽어주기
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)
✔️input().split()으로 읽어오면 string으로 읽어오게 되므로 int내장함수로 정수화 시켜주기
sec02-2번 k번째 수➿
import sys
sys.stdin = open("input.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("#", t+1, a[k-1])
✔️ 다른 출력방식 print("#%d %d" %(t, a[k-1]))
02-3번 k번째 큰 수➿
#sec02_n3_K번째 큰 수
import sys
sys.stdin = open("input/input_sec02_n3.txt", "rt")
n, k = map(int, input().split())
a = list(map(int, input().split()))
#자료구조 set = 중복을 제거한다.
res = set()
for i in range(n):
for j in range(i+1, n):
for m in range(j+1, n):
res.add(a[i]+a[j]+a[m])
#자료구조 set은 sort기능이 없기때문에 list화
res = list(res)
res.sort(reverse=True)
print(res[k-1])
✏️ 세개의 수 조합을 어떻게 해결해야할지 모르겠었는데 강의 풀이 영상을 보니 for문으로 해결할 수 있는 거였다. 분명 옛날에 했던건데 기억이 1도 안난다... 더 열심히 해야겠다 ^_^...
sec02. 최솟값구하기➿
#최솟값 구하기
arr = [5,3,7,9,2,5,2,6]
arrMin = float('inf') #arrMin에 가장 큰 값이 저장됨(초기화 시킨 값)
for i in range(len(arr)):
if arr[i] < arrMin:
arrMin = arr[i]
print(arrMin)
sec02-4번 대표값 구하기
#대표값
import sys
sys.stdin = open('input/input_sec02_n4.txt', 'rt')
N = int(input())
a = list(map(int, input().split())) #학생들 점수를 학생번호 순서대로 받아온다.
sum = 0
#학생 전체 점수 총합
for n in range(N):
sum += a[n]
#평균 구하기
av = round(sum / N)
#평균과 학생들 각각의 점수 비교를 위한 리스트 생성
b = list()
for n in range(N):
b.append(int(a[n] - av))
#절댓값으로 평균과 가장 가까운 점수를 구한다.
minIndex = abs(b[0])
minIndexlist = list()
for n in range(1, N):
if abs(b[n]) <= minIndex:
minIndex = abs(b[n])
minIndexlist.append(n)
#평균과 가까운 점수들 중에서 높은 점수를 구한다.
result = b[minIndexlist[0]]
for i in range(1, len(minIndexlist)):
if result < b[minIndexlist[i]] :
result = minIndexlist[i]
print(av, result+1)
🔎➿
sys.stdin = open('input/input_sec02_n4.txt', 'rt')
N = int(input())
a = list(map(int, input().split())) #학생들 점수를 학생번호 순서대로 받아온다.
sum = 0
#학생 전체 점수 총합
for n in range(N):
sum += a[n]
#평균 구하기
av = round(sum / N)
#평균과 학생들 각각의 점수 비교를 위한 리스트 생성
b = list()
for n in range(N):
b.append(int(a[n] - av))
#절댓값으로 평균과 가장 가까운 점수를 구한다.
minIndex = abs(b[0])
index = 0
for n in range(1, N):
if abs(b[n]) < minIndex:
minIndex = abs(b[n])
index = n
#같은 절댓값에서 크기가 크고 학번순이 빠른 사람을 고른다.
#같은 절댓값을 가진 값이 있다면 리스트에 추가해줌
abc = list()
for n in range(1, N):
if abs(b[n]) == minIndex:
abc.append(n)
max = a[abc[0]]
result = abc[0]
for i in range(1, len(abc)):
if max < a[abc[i]]:
max = a[abc[i]]
result = abc[i]
print(av, result+1)
<강의 자료꺼 코드>➿
import sys
#sys.stdin = open('input/input_sec02_n4.txt', 'rt')
N = int(input())
a = list(map(int, input().split())) #학생들 점수를 학생번호 순서대로 받아온다.
ave = round(sum(a)/n)
min = 2147000000
#idx는 리스트 a의 idx값이 반환된다, x는 실제 값이 쌍으로 대응된다. -> enumerate
for idx, x in enumerate(a):
tmp = abs(x-ave)
if tmp < min:
min = tmp
score = x
res=idx+1
elif tmp == min:
if x > score:
score = x
res = idx + 1
print(ave, res)
sec02-5번 정다면체➿
# 정다면체
import sys
sys.stdin = open("sec02/input/input_sec02_n5.txt", 'rt')
N, M = map(int, input().split())
#두 눈의 합을 저장할 리스트
a = list()
for n in range(N):
for m in range(M):
a.append((n+1) + (m+1))
#두눈의 합의 빈도수를 저장할 리스트
b = list()
for i in range(2, N+M+1):
count = 0
for j in range(len(a)):
if i == a[j]:
count += 1
b.append(count)
#가장 확률이 높은 = 가장 많이 나오는 빈도수 구하기
maxNumber = 0
for i in range(len(b)):
if b[i] >= maxNumber:
maxNumber = b[i]
# 높은 빈도수를 가지는 눈의 합 구하기
for i in range(len(b)):
if b[i] == maxNumber:
print(a[i], end=" ")
정 N면체와 정 M면체를 던졌을때 나올수 있는 눈의 합 경우를
구한다. → 리스트 a
나올수 있는 눈의 합 경우 : 최소 2부터 N+M까지
이 경우가 몇번나왔는지 구한다 → 리스트 b
가장 확률이 높은 숫자 = 가장 많이 나온 눈의합 빈도수 이므로 높은 빈도수를 가지는 눈의 합을 구한다 → maxNumber
높은 빈도수를 가지는 숫자가 여러개일수 있으므로 같은 높은 빈도수를 가지는 눈의 합을 구한다.
✏️코드를 다시 살펴보니 앞부분을 삼중포문으로 할수 있겠다는 생각이 들었다.
<강의자료 코드>➿
# 정다면체
import sys
sys.stdin = open("sec02/input/input_sec02_n5.txt", 'rt')
n, m = map(int, input().split())
#크기 n+m이고 초기값 0인 리스트 생성
cnt = [0]*(n+m+1)
#각 수의 합으로 cnt인덱스를 구분해 수 세줌
for i in range(1, n+1):
for j in range(1, m+1):
cnt[i+j] += 1
max = 0
for i in range(n+m+1):
if cnt[i] > max:
max = cnt[i]
for i in range(n+m+1):
if cnt[i] == max:
print(i, end=" ")
✏️강의 자료의 코드인데 여기서는 합의 개수를 저장할 cnt라는 리스트를 생성해 사용했다. 두수의 합을 cnt인덱스로 사용해 두수의 합이 얼마나 나오는지 확인했다. 이게 더 깔끔한거 같고 cnt[i+j] += 1 이렇게 사용하는 방식이 참신했다
Author And Source
이 문제에 관하여(sec02(1-5).코드 구현력 기르기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kkk5792/sec02.코드-구현력-기르기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)