🎸/알고리즘 스터디

[ EPPER 2021] 하 문제 모음

컴공생 C 2021. 3. 18. 00:01
반응형

# -*- coding: utf-8 -*-
# UTF-8 encoding when using korean
user_input = int(input())
a=[]
for i in range(user_input):
	a.append(int(input()))
def solution(n, arr):
	arr=sorted(arr)
	if (n==1):
		avg=arr[0]
	else:
		for i in range(n-1):
			avg=(arr[0]+arr[1])/2
			arr.pop(0)
			arr.pop(0)
			arr.insert(0,avg)
	return avg

print("%.6f" %solution(user_input,a))

답이 추구하는 가장 이상적인 상황은 배열이 오름차순으로 정렬되어있는 상태에서 평균을 구해나가는 것이다.

주의해야할 것은 1) 개수가 1인 상황과 2) n개의 원소가 있을때 연산은 총 n-1번 수행 3) pop을 할때 그냥 pop()하면 마지막 원소가 나와버림

# -*- coding: utf-8 -*-
# UTF-8 encoding when using korean
user_input = int(input())

def solution(n):
	rn=n//15+1
	sn=n%15
	if(sn==0):
		sn=15
		rn-=1
	return rn,sn

print("%d %d" %solution(user_input))

이문제는 좀 쉬운 편이었다.

고려해야할 상황은

1) 방번호는 몫+1인데 만약 딱 15의 배수면 몫-1일 해줘야함

2)15의 배수명이면 나머지가 0이기에 sn=15로 설정해주어야함

# -*- coding: utf-8 -*-
# UTF-8 encoding when using korean
user_input = int(input())
price=int(input())

def solution(pay,price):
	money=[50000,10000,5000,1000,500,100,50,10]
    #거스름돈 계산
	n=pay-price
	cnt=0
	kind=0
	for i in money:
		if(n//i):
			kind+=1
			cnt+=n//i
			n%=i
	return kind, cnt

print("%d %d" %solution(user_input, price))

이것도 쉬웠다.

1) 배열에 돈의 종류를 저장해 둘것

2) 잔돈을 거슬러주면 나머지로 초기화 해주어야함

 

user_input=input()

def solution(n):
	ans=''
	cnt=0
	a=ord("A")
	if(n[0]=='1'):
		ans='1'

	for i in range(len(n)-1):
		if(n[i]!=n[i+1]):
			ans+=chr(a+cnt)
			cnt=0
		else:
			cnt+=1
	ans+=chr(a+cnt)
	return ans

print("%s"%solution(user_input))
	

1) ord, chr 함수 기억하기

  - A 의 아스키 값을 a로 사용해서 사실상 cnt=1 로 시작하는 것과 같다.

2) for문에 len(n)-1 꼭 해야함

반응형