[python 기초]백준: 1차원 배열 1 (2577,3052,1546) / 배열, 리스트 내포 복습

배열 관련 문제를 풀고, 리스트 내포도 다시 한번 활용해보자.


📍In a nutshell...

  • for문을 활용해서 list 형태 변수에 값을 넣을 수 있다
  • 입력값을 복수로 받아서 list함수 사용하려면 list로 변환하는 것 잊지 말기
  • list comprehension(리스트 내포) 활용하기

#2577번

세 개의 자연수를 입력받고, 모두 곱해서 나온 값의 각 숫자 개수를 1~9까지 차례대로 출력하는 문제다. key point는 자연수 3개 곱한 값을 개별 숫자로 쪼개는 것이다.(str() ,int() 활용)

a = int(input())
b = int(input())
c = int(input())

mul = a*b*c

for a in str(mul):	#mul값을 문자로 변환 후, 개별 정수로 쪼개 list에 담는다. 
	new_mul = []
    new_mul.append(int(a))
    
for i in range(10):	#0부터 9까지 각 숫자의 개수를 차례대로 출력 
	print(new_mul.count(i))

여기서 list comprehension을 문자로 사용하면 문자형->정수형 변환 및 append()가 한번에 처리된다.

a = int(input())
b = int(input())
c = int(input())

mul = a*b*c
result = [int(a) for a in str(mul)]	#list comprehension 이용. 변수명은 result로 바꿈.

for i in range(10):
    print(result.count(i))

개별 정수로 쪼개서 list에 담는 것은 구글링해서 힌트를 얻었다. (출처:stakeoverflow)


#3052번
수 10개를 입력받은 뒤, 이를 각각 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 문제다. 서로 다른 값만 남기려면 list()set()을 활용하면 된다.

lst = []
for i in range(10):
    lst.append(int(input()))
    lst[i] % 42 

new_lst = set(lst)	#set()으로 변환해 중복값 제거 
print(len(new_lst))

#1546번
첫째 줄에는 시험 과목 개수, 둘째 줄에는 각 과목 별 점수를 입력한다. 그리고 나서 점수 중 최대값 M을 골라, 점수/M*100으로 고친다. 이 때 새롭게 구해진 평균을 출력하면 된다.

N = int(input())
score = lst(map(int,input().split()))
M = max(score)	#score[] 중 최대값 

new_score = [score[i]/M*100 for in range(N)]	#new_score[] 생성 (list comprehension 형태) 
new_average = sum(new_score)/len(new_score)		#새로운 평균 

print(new_average)




출처: 백준

좋은 웹페이지 즐겨찾기