# 3. APS/기타

제코베 Code Festival Python 100제 1권_문제 30~40

둥굴둥굴둥굴레차 2021. 9. 4. 23:38

문제31

파이썬 자료형의 복잡도

 

다음 리스트의 내장함수의 시간 복잡도가 O(1)이 아닌것은?

  1. l[i]
  2. l.append(5)
  3. l[a:b]
  4. l.pop()
  5. l.clear()

 

[답안]

정답은 '3번'

 

문제32

문자열 만들기

 

취업 준비생인 혜림이는 자기소개서를 쓰고 있습니다. 열심히 자기소개서를 작성하던 도중 혜림이는 자기가 지금까지 단어를 얼마나 적었는지 궁금하게 됩니다.

혜림이를 위해 문자열을 입력받으면 단어의 갯수를 출력하는 프로그램을 작성해 주세요.

입력 : 안녕하세요. 저는 제주대학교 컴퓨터공학전공 혜림입니다.
출력 : 5

 

 

[나의 풀이]

import sys

sen = list(sys.stdin.readline())

word_count = 0
for i in sen:
    if i == ' ':
        word_count += 1
print(word_count + 1)

 

[답안]

import sys

sentence = sys.stdin.readline()

# split()은 모든 공백을 제거하여 준다.
word_count = list(sentence.split())
print(len(word_count))

 

strip([chars])

인자를 string의 좌우에 있는지 확인하고 있으면 삭제합니다.
만약 인자값을 주지 않았을 땐 공백을 제거합니다.

 

 

 

문제33

거꾸로 출력하기

 

한 줄에 여러개의 숫자가 입력되면, 역순으로 그 숫자들을 하나씩 출력하는 프로그램을 작성하시오.

 

입력 : 1 2 3 4 5

출력 : 5 4 3 2 1

 

입력 : 2 4 6 7 8

출력 : 8 7 6 4 2

 

[나의 풀이]

import sys

# split()을 사용하여 모든 공백을 제거.
input_value = list(sys.stdin.readline().split())

# ' '.join을 사용하여 ' '을 단어 사이에 끼워넣은 하나의 문자열로 반환.
print(' '.join(input_value[::-1]))

 

 

문제34

sort 확인하기

 

민주는 체육시간이 되면 반 친구들이 키 순서대로 모였는지를 확인해야 한다.

그런데 요즘 민주는 그것이 너무 번거롭게 느껴져 한 번에 확인하고 싶어한다.

 

민주를 위해 키가 주어지면 순서대로 섰는지 확인하는 프로그램을 작성해보자.

 

입력 : 176 156 155 165 166 169

출력 : NO

 

 

 

[나의 풀이]

import sys

# 숫자로서 비교해야 하니 map을 사용하여 int로 매핑해주자.
height_value = list(map(int, sys.stdin.readline().split()))

# sorted 내장함수를 사용하여 정렬된 height_value를 구하자.
sorted_height_value = sorted(height_value)

# 만약 input값으로 받아온 height_value와 정렬된 sorted_height_value가 같지 않다면
if height_value != sorted_height_value:
    print("NO")
    
# 만약 같다면
else:
    print("YES")

 

[답안]

user_input = input()

l = list(user_input.strip().split())
l = [int (i) for i in l]

if l != sorted(l):
	print("NO")
	
else:
	print("YES")

 

 

문제35

Factory 함수 사용하기

 

2제곱, 3제곱, 4제곱을 할 수 있는 Factory 함수를 만들려고 합니다.

 

<pass>에 코드를 작성해 two함수를 완성해라.

def one(n):
    def two():
        <pass>
    return two

a = one(2)
b = one(3)
c = one(4)
print(a(10))
print(b(10))
print(c(10))

 

 

[나의 풀이]

def one(n):
    def two(m):
        res = m**n
        return res
    return two

a = one(2)
b = one(3)
c = one(4)
print(a(10))
print(b(10))
print(c(10))

 

문제36

구구단 출력하기

 

1~9까지의 숫자 중 하나를 입력하면 그 단의 구구단 결과를 한 줄에 출력하는 프로그램을 작성하세요.

 

>> 입력

2

 

>> 출력

2 4 6 8 10 12 14 16 18

 

 

[나의 풀이]

import sys

N = int(sys.stdin.readline())

for i in range(1, 10):
    print(N*i, end=' ')

 

 

문제37

count 사용하기

 

새 학기를 맞아 호준이네 반은 반장 선거를 하기로 했습니다.

당신은 학생들이 뽑은 후보들을 입력받으면 뽑힌 학생의 이름과 받은 표 수를 출력하는 프로그램을 만들기로 했습니다.

 

>> 입력

원범 원범 혜원 혜원 혜원 혜원 유진 유진

 

>> 출력

2 4 6 8 10 12 14 16 18

 

 

[나의 풀이]

import sys

names = sys.stdin.readline().split()
name_set = set(names)
name_dict = {}
for key in name_set:
    name_dict[key] = names.count(key)

print(f'{max(data_dict, key=data_dict.get)}(이)가 총 {max(data_dict.values())}표로 반장이 되었습니다.')

 

 

문제38

호준이의 아르바이트

 

호준이는 아르바이트로 영어 학원에서 단어 시험지를 채점하는 일을 하고 있다. 호준이가 일하는 학원은 매번 1위부터 3위까지의 학생에게 상으로 사탕을 준다. 그런데 오늘은 마침 사탕이 다 떨어져서 호준이가 채점을 하고 점수를 보내면, 당신이 아이들의 숫자만큼 사탕을 사러 가기로 했다.

학생들의 점수를 공백으로 구분하여 입력받는다. 1위~ 3위 학생은 여러명일 수 있고 1~3위 학생 중 중복되는 학생까지 포함하여 사탕을 사기로 한다.

  • 학생 수는 4명 이상입니다.
  • 숫자 외에 다른 값은 입력되지 않습니다.

 

점수입력 : 97 86 75 66 55 97 85 97 97 95

출력 : 6

 

 

[나의 풀이]

data = input().split()
data = [int(i) for i in data]

count = 0

if len(set(data)) <= 3:
    count = len(data)
else:
    break_point = sorted(list(set(data)), reverse=True)[3]
    data_sorted = sorted(data, reverse=True)
    for i in data_sorted:
        if break_point == i:
            break
        else:
            count += 1

print(count)

 

문제39

오타 수정하기

 

혜원이는 평소 영타가 빠르고 정확한 것을 친구들에게 자랑하고 다녔습니다. 반 친구들이 혜원이의 타자 속도가 빠르다는 것을 모두 알게 되자 혜원이는 모두의 앞에서 타자 실력을 보여주게 됩니다.

그런데 막상 보여주려니 긴장이 되서 문장의 모든 e를 q로, n을 b로 잘못 친 것을 발견했습니다. 혜원이는 프로그램을 돌려 재빠르게 모든 q를 e로, b를 n으로 바꾸는 프로그램을 작성하려고 합니다.

문장이 입력되면 모든 q를 e로, b를 n으로 바꾸는 프로그램을 작성해 주세요.

  • 완성하려는 문장 안에 q나 b가 들어가지 않는다고 가정합니다.

 

입력 : querty

출력 : euerty

 

입력 : hqllo my bamq is hyqwob

출력 : hello my bame is hyewob

 

 

 

[나의 풀이]

data = input()

print(data.replace('q', 'e').replace('b', 'n')).

 

 

문제40

놀이동산에 가자

 

테마파크에 온 원범이와 친구들은 놀이기구를 타려고 합니다. 모든 놀이기구는 한번에 타는 인원수에는 제한이 없지만 제한 무게를 넘으면 무조건 다음 기구를 타야 합니다.

원범이와 친구들이 총 몇 명 탈 수 있는지 알 수 있는 프로그램을 작성해 주세요.

첫번째 줄에서 제한 무게가 주어지고 두번째 줄에서는 함께한 친구들의 수 n이 주어집니다. 그 다음 차례대로 탑승할 친구들의 몸무게가 주어집니다. 몸무게는 무작위로 주어집니다.

  • 단, 놀이기구는 선착순으로만 탈 수 있습니다.
  • 두 명 이상의 인원이 항상 탑승합니다.

 

입력 50 5 20 20 20 20 20

출력 2

 

 

[나의 풀이]

# 기존코드
total = 0
count = 0
limit = int(input('제한무게는 얼마인가요? : '))
n = int(input('몇명이 탈 수 있나요? : '))
 
for i in range(n):
    total += int(input('몸무게를 입력해주세요 : '))
    if total <= limit:
        count += 1

        
print(count)

# 기존 코드 2

제한무게 = int(input())
친구수 = int(input())
친구몸무게 = []
for i in range(친구수):
    친구몸무게.append(int(input()))

전체몸무게 = 0
for i in range(len(친구몸무게)):
    전체몸무게 += 친구몸무게[i]
    print(전체몸무게, 제한무게)
    if 전체몸무게 > 제한무게:
        print(i)
        break

# 새로 작성된 코드
제한무게 = float(input())
친구수 = int(input())
친구몸무게 = []
전체몸무게 = 0
제한수 = 0
비교 = True

for i in range(친구수):
    친구몸무게.append(float(input()))
    전체몸무게 += 친구몸무게[i]
    if 전체몸무게 > 제한무게:
        if 비교:
            비교 = False
            제한수 = i
if 제한수 == 0 and 친구몸무게[0] <= 제한무게:
    print(len(친구몸무게))
else:
    print(제한수)