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])


파이썬에서 각 자리 숫자를 분리하는 방법이 기억안나서 찾아봤는데 세가지 방법이 있다

  1. 문자열로 변환후 분리하기
  2. 10으로 나누어 자릿수 분리하기(1의 자리부터 분리해야함)
  3. 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라면 소수이니까 그렇게 소수를 판별했는데 시간 초과됐다. 그래서 사용한 방법은 에라토스 테네스의 체이다.

에라토스테네스의 체 = 소수를 찾는 방법 / 가장 빨리 소수의 개수를 알아낼수 있다.

  1. ch라는 리스트에 인덱스 번호가 1부터 N까지의 숫자라고 생각함(초기값 0)
  2. 1은 소수가 아니기 때문에 for문이 2부터 N까지 돈다
  3. ch[i]가 0이면<2의 경우> cnt(소수의 개수)를 1증가한다.
  4. 두번째 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를 풀면서 기본적인 부분에 대해서 복습할 수 있었다. 풀면서 내가 많이 까먹었다는 것을 느낄 수 있었다 ㅠㅠ

좋은 웹페이지 즐겨찾기