[Python] Covernant님 문제집 - PART 1. 튼튼한 기본기(6번,7번,11번)

ossap·2021년 12월 18일
0

백준 문제, 기본부터 최다 빈출 문제까지 풀기

준비운동 Part1. 튼튼한 기본기

코딩테스트를 대비하며 여러 문제를 풀고자 합니다.
코테 연습용 문제는 매우 많으므로, 좋은 문제들만 엄선한 포스팅을 따라 순서대로 풀겠습니다.
이번에 따라할 문제 로드맵은 이곳입니다.
Covernant님 로드맵

6번부터 이어 풀겠습니다~

6. 일곱 난쟁이 (🥉 브론즈 2티어, 2309번)

문제

왕비를 피해 일곱 난쟁이들과 함께 평화롭게 생활하고 있던 백설공주에게 위기가 찾아왔다. 일과를 마치고 돌아온 난쟁이가 일곱 명이 아닌 아홉 명이었던 것이다.

아홉 명의 난쟁이는 모두 자신이 "백설 공주와 일곱 난쟁이"의 주인공이라고 주장했다. 뛰어난 수학적 직관력을 가지고 있던 백설공주는, 다행스럽게도 일곱 난쟁이의 키의 합이 100이 됨을 기억해 냈다.

아홉 난쟁이의 키가 주어졌을 때, 백설공주를 도와 일곱 난쟁이를 찾는 프로그램을 작성하시오.

입력

아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.

출력

일곱 난쟁이의 키를 오름차순으로 출력한다. 일곱 난쟁이를 찾을 수 없는 경우는 없다.

🙋‍♀️ 내 풀이

dwarfs = [int(input()) for i in range(9)]
dwarfs.sort()
differences = sum(dwarfs)-100
fake = []
# 최대값 원소인 25랑 합쳐도 40(differences)보다 작으면 100이 될 수 없다.
# 그러니 15부터만 후보이다.
# 그래서 4부터 시작했더니 틀렸다고뜬다...ㅠㅠ 코드로 컴퓨터한테 이해시켜야할듯.
for f in range(len(dwarfs)):
    for f2 in range(f+1,len(dwarfs)):   
        if differences == (dwarfs[f]+dwarfs[f2]):
            fake.append(dwarfs[f])
            fake.append(dwarfs[f2])
    if len(fake)==2 :
        breakß
result = [x for x in dwarfs if x not in fake]
result.sort()
for x in result:
    print(int(x))

7. 최대공약수와 최소공배수 (🥈실버 5티어, 2609번)

문제

두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.

출력

첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.

🙋‍♀️ 내 풀이

num = list(map(int,input().split()))
x=max(num)
y=min(num)
for i in range(y,1,-1):
    if x%i == 0 and y%i == 0:
        gcd = i
        print(gcd, int(x*y/gcd))
        break
else: print(1, x*y)

7까지 잘 풀려서 8,9,10은 스킵

11. 소수 (🥈실버 4티어, 2581번)

문제

자연수 M과 N이 주어질 때 M이상 N이하의 자연수 중 소수인 것을 모두 골라 이들 소수의 합과 최솟값을 찾는 프로그램을 작성하시오.

예를 들어 M=60, N=100인 경우 60이상 100이하의 자연수 중 소수는 61, 67, 71, 73, 79, 83, 89, 97 총 8개가 있으므로, 이들 소수의 합은 620이고, 최솟값은 61이 된다.

입력

입력의 첫째 줄에 M이, 둘째 줄에 N이 주어진다.

M과 N은 10,000이하의 자연수이며, M은 N보다 작거나 같다.

출력

M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다.

단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다.

🙋‍♀️ 내 풀이

M, N = [map(int,input().strip()) for _ in range(2)]

for i in (M,N+1):
    if i > 1 :
        for j in range(2,i+1):
            if i%j == 0:
                break
            else
profile
오삽 : 오늘도 삽질

0개의 댓글