sec02(6-10).코드 구현력 기르기
sec02-5번. 자릿수의 합➿
# 자릿수의 합
import sys
sys.stdin = open('sec02/input/input_sec02_n6.txt', 'rt')
N = int(input())
a = list(map(int, input().split()))
#map함수를 활용해 원소값 더하기
def digit_sum(x):
return sum(map(int, str(x)))
#숫자의 각자리수를 더한 값을 저장할 리스트
b = list()
for n in range(N):
b.append(digit_sum(a[n]))
#각자리수를 더한 값들중 가장 큰 값과 인덱스 구함
maxn = 0
maxi = 0
for i in range(len(b)):
if maxn < b[i]:
maxn = b[i]
maxi = i
print(a[maxi])
파이썬에서 각 자리 숫자를 분리하는 방법이 기억안나서 찾아봤는데 세가지 방법이 있다
- 문자열로 변환후 분리하기
- 10으로 나누어 자릿수 분리하기(1의 자리부터 분리해야함)
- map함수를 활용해 원소값 더하기 → sum(map(int, str(x)))
map함수를 사용할 생각을 못했기 때문에 이 방법을 써보았다.
<강의자료 코드>➿
# 자릿수의 합
import sys
sys.stdin = open('sec02/input/input_sec02_n6.txt', 'rt')
n = int(input())
a = list(map(int, input().split()))
def digit_sum(x):
sum = 0
while x > 0:
sum += x%10 #x를 10으로 나눈 나머지를 sum에 누적
x = x//10 #x는 x를 10으로 나눈 몫이 된다
return sum
max = 0
for x in a:
tot = digit_sum(x)
if tot > max:
max = tot
res = x
print(res)
✏️강의 코드에서는 2번의 방법으로 코드를 작성했다. 그리고 가장 큰 자리수의 합을 구할때 하나의 for문과 조건을 사용해 바로 구했다. 나는 자리수의 합을 리스트에 저장하고 그걸또 for문 돌리고 했는데 이 방식이 좀더 깔끔한거 같다.
<1번의 방법>➿
# 자릿수의 합
import sys
sys.stdin = open('sec02/input/input_sec02_n6.txt', 'rt')
n = int(input())
a = list(map(int, input().split()))
def digit_sum(x):
sum = 0
for i in str(x):
sum += int(i)
return sum
max = 0
for x in a:
tot = digit_sum(x)
if tot > max:
max = tot
res = x
print(res)
sec02-7번 소수(에라토스테네스의 체)➿
# 소수(에라토스테네스 체)
import sys
sys.stdin = open('sec02/input/input_sec02_n7.txt', 'rt')
N = int(input())
count = 0
for n in range(2, N+1):
num = 0
for i in range(1, n+1):
if n % i == 0:
num += 1
if num == 2:
count += 1
print(count)
✏️소수가 뭐였는지 까먹었다.....ㅋㅎ.... 조금 충격적
소수 = 1보다 큰 자연수 중 1과 자기 자신만을 약수로 가지는 수
소수 구하는게 헷갈려서 인터넷 참고했다. 1부터 N까지의 수 중에서 각 수를 1부터 그 수까지 나눠보고 나눠지는 수가 2라면 소수이니까 그렇게 소수를 판별했는데 시간 초과됐다. 그래서 사용한 방법은 에라토스 테네스의 체이다.
에라토스테네스의 체 = 소수를 찾는 방법 / 가장 빨리 소수의 개수를 알아낼수 있다.
- ch라는 리스트에 인덱스 번호가 1부터 N까지의 숫자라고 생각함(초기값 0)
- 1은 소수가 아니기 때문에 for문이 2부터 N까지 돈다
- ch[i]가 0이면<2의 경우> cnt(소수의 개수)를 1증가한다.
- 두번째 for문으로 2의 배수를 반복해 체크한다.(소수가 아닌 것들을 걸러낸다)
3과 4를 반복한다.
<강의자료 코드>➿
# 소수(에라토스테네스 체)
import sys
sys.stdin = open('sec02/input/input_sec02_n7.txt', 'rt')
n = int(input())
ch = [0]*(n+1)
cnt = 0
for i in range(2, n+1):
if ch[i] == 0:
cnt += 1
for j in range(i, n+1, i): #i의 배수씩 for문 돌림
ch[j] = 1
print(cnt)
sec02-8번 뒤집은 소수➿
# 뒤집은 소수
import sys
sys.stdin = open('sec02/input/input_sec02_n8.txt', 'rt')
N = int(input())
a = list(map(int, input().split()))
def reverse(x):
reX = ''
while x > 0:
reX += str(x%10)
x = x//10
return int(reX)
def isPrime(x):
num = 0
for i in range(1, x+1):
if x%i == 0:
num += 1
if num == 2:
return True
for x in a:
number = reverse(x)
if isPrime(number) == True:
print(number)
✏️소수를 뒤집는 방법에서 앞서 썼던 ‘10으로 나누어 자리수 분리하기’의 방법을 사용했다. 소수를 확인하는 방법으로는 x를 1부터 x의 수까지로 나누어 나머지가 0이 되는 약수가 2개라면 소수로 판별하도록 했다.
sec02-9번 주사위게임➿
# 주사위 게임
import sys
sys.stdin = open('sec02/input/input_sec02_n9.txt', 'rt')
N = int(input())
def number(a):
cnt = 0
n = 0
for i in range(len(a)-1):
for j in range(i+1, len(a)):
if a[i] == a[j]:
cnt += 1
n = a[i]
return cnt, n
def calculateReward(a):
reward = 0
num = number(a)[0]
same = number(a)[1]
#같은 눈이 3개 나오는 경우
if num == 3:
reward = 10000 + same*1000
#같은 눈이 2개만 나오는 경우
elif num == 1:
reward = 1000 + same*100
else:
max=0
for i in range (len(a)):
if max<a[i]:
max = a[i]
reward = max*100
return reward
b = list()
for n in range(N):
a = list(map(int, input().split()))
b.append(calculateReward(a))
max = 0
for n in range(N):
if max < b[n]:
max = b[n]
print(max)
sec02-10번 점수구하기➿
# 점수구하기
import sys
sys.stdin = open('sec02/input/input_sec02_n10.txt', 'rt')
N = int(input())
a = list(map(int, input().split()))
score = list()
cnt = 0
for n in range (len(a)):
cnt += 1
if a[n] == 0:
cnt = 0
score.append(cnt)
if a[n] == 1:
score.append(cnt)
sum = 0
for n in range(len(score)):
sum += score[n]
print(sum)
✏️ sec02를 풀면서 기본적인 부분에 대해서 복습할 수 있었다. 풀면서 내가 많이 까먹었다는 것을 느낄 수 있었다 ㅠㅠ
Author And Source
이 문제에 관하여(sec02(6-10).코드 구현력 기르기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kkk5792/sec026-10.코드-구현력-기르기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)