문제 1 ) 10개의 수를 입력받아 리스트(list)에 저장하시오.
- 리스트의 원소를 역순(reverse)으로 출력하시오
- 10개의 수 중 최댓값을 찾고 최댓값의 위치(인덱스)를 출력하시오
#10개 숫자 입력 및 리스트로 생성
num_list = list(map(int, input().split()))
print(" list :", num_list)
#10개 숫자 역순으로 출력
reverse_list=num_list[::-1]
print("reverse :",reverse_list)
#최댓값 및 인덱스 출력
count=0
for num in num_list:
if count < num:
count = num
for num_index in range(0,len(num_list)):
if num_list[num_index] == count:
print('max :', count, ', index :',num_index)
문제 2 ) 0부터 100사이의 수를 입력 받은 후, 등급을 출력하시오.
print("0부터 100 사이의 수를 입력하시오")
score=int(input())
if 100>=score>=90:
print('등급 : A')
elif 90>score>=80:
print('등급 : B')
elif 80>score>=70:
print('등급 : C')
else:
print('등급 : D')
문제 3 ) 0부터 100사이의 임의의 정수 50개를 생성한 후, 동일한 값의 존재 유무를 확인하는 알고리즘을 구현하시오.
#random 모듈 사용
import random
#0부터 100사이의 임의의 정수 50개 생성
random_num = []
for i in range(1,50):
num=random.randint(0,101)
random_num.append(num)
print('임의 정수 50개 :',random_num)
#set함수 사용, 처음과 두번째 비교하는 반복문을 사용했더니 바로 옆에 있는 것들끼리 비교됨
#동일한 값 존재 유무 확인
if len(random_num)==len(set(random_num)):
print(" 동일 값 유무 : X")
else:
print(" 동일 값 유무 : O")
문제 4 ) 입력 받은 임의의 양의 정수가 정수가 소수인지 아닌지 판별하는 알고리즘을 구현하시오.
#양의 정수 입력 받기
a = int(input("양의 정수를 입력하시오 : "))
#리스트 생성하기
list_a=[]
#입력 받은 수의 약수 구하기
for i in range(1,a+1):
if a%i == 0:
list_a.append(i)
#약수가 2개만 존재할시 소수
if len(list_a) == 2:
print("해당 수는 소수입니다.")
#약수가 2개가 아닌 수만큼 존재할 시 소수가 아님
else:
print("해당 수는 소수가 아닙니다.")
문제 5 ) for문을 사용하여 다음과 같이 출력하시오.
![[스크린샷 2022-10-11 오전 11.33.34.png]]
#삼각형 만들기
for top in range(6):
print(" "*(5-top)+"*"*((2*top)-1))
for down in range(5):
print(" "*(down)+"*"*(9-(2*down)))
문제 6 ) 패턴을 압축하는 알고리즘을 구현하시오.
- 예시 : aabbaabbcaabc -> a2b2a2b2c1a2b1c1
#패턴 입력
i_pattern = input("문자열을 입력하시오 : ")
#패턴 리스트로 변환
l_pattern = list(i_pattern)
p_pattern = ""
c_pattern = 1
#패턴 리스트 index 0부터 바로 옆 비교하면서 count해주기
for i in range(1, len(l_pattern)):
if l_pattern[i-1] == l_pattern[i]:
c_pattern = c_pattern+1
elif l_pattern[i-1] != l_pattern[i]:
p_pattern = p_pattern + l_pattern[i-1] + str(c_pattern)
c_pattern = 1
if i == len(l_pattern) -1 :
p_pattern = p_pattern + l_pattern[i] + str(c_pattern)
p_pattern
문제 7 ) 키보드로부터 다음의 조건을 만족하도록 문자를 입력 받고, 대소문자를 변환하는 알고리즘을 구현하시오
- 문자열에는 반드시 특수문자, 소문자, 대문자, 숫자가 포함되어야 한다.
- 위의 조건을 하나라도 만족하지 못하는 경우, 만족할 때까지 재입력을 받는다 -- 무한루프
- 특수문자 및 숫자는 그대로 놔두고, 소문자는 대문자로, 대문자는 소문자로 변환하여 출력한다.
- 단, lower(), upper()등의 문자열 메서드(method)는 사용하지 말고, ASCII Code표를 참고하여 대소문자 관계를 활용하여 직접 구현하시오.
#무한루프
while True:
#문자 입력하기
#대문자, 소문자 변환
text = input("문자를 입력하시오 : ")
print(" 변환된 값 : ", end='')
for data in range(len(text)) :
if 65<=ord(text[data])<=90:
print(chr(ord(text[data])+32), end='')
elif 97<=ord(text[data])<=122:
print(chr(ord(text[data])-32), end='')
else:
print(text[data], end='')
#변수 선언
count_1=0
count_2=0
count_3=0
count_4=0
#대문자, 소문자, 특수문자, 소문자인 경우 break
for find in text:
if ord(find)>=48 and ord(find)<=57:
count_1 =+ 1
elif ord(find)>=65 and ord(find)<=90:
count_2 =+ 1
elif (1|2|3|4|5|6|7|8|9|0):
count_3 =+ 1
if count_1 >= 1:
if count_2 >= 1:
if count_3 >= 1:
break
#ascii 소문자랑 대문자 차이 숫자 간격(32) 확인하면 될듯
#ord : ASCII코드 값으로 변환
#chr : ASCII코드를 문자로 변환
문제 8 ) 1부터 100사이의 자연수가 적힌 N장의 카드가 있습니다. 같은 숫자의 카드가 여러 장 있을 수 있습니다.
- 이 중 3장을 뽑아 각 카드에 적힌 수를 합한 값의 모든 경우의 수를 기록합니다.
- (중복된 합한 값은 1개의 값으로 기록한다.)
- 이 중 K번 째로 큰 수를 출력하세요.
import random
from itertools import combinations
#1부터 100사이의 자연수가 적힌 N장의 카드 & K번째 입력
N = int(input("카드 갯수 : "))
K = int(input("K번 째 카드 : "))
#N장의 카드 랜덤 추출
random_num = []
for i in range(0,N):
num=random.randint(1,101)
random_num.append(num)
print("카드 추출 :",random_num)
#3개씩 합치는 경우의 수(조합)
num_3 = list(combinations(random_num,3))
result_num = []
sum = 0
for i in range(0,len(num_3)):
for j in num_3[i]:
sum = sum+j
result_num.append(sum)
print("카드 합 모든 경우의 수 :",result_num)
#K번 째로 큰 수
count_k=K-1
print(K,"번 째로 큰 수 :",result_num[count_k])
'전공정리 > 알고리즘' 카테고리의 다른 글
[알고리즘] 문제 풀이 해답 (0) | 2023.02.03 |
---|---|
[알고리즘] 특수 정렬 알고리즘 (0) | 2023.02.03 |
[알고리즘] 고급 정렬 알고리즘 (0) | 2023.02.03 |
[알고리즘] 기초 정렬 알고리즘 (0) | 2023.02.03 |
[알고리즘] 알고리즘 설계와 분석의 기초 (0) | 2023.02.03 |