-문제: https://www.acmicpc.net/problem/13305

 

-정답풀이:

그때그때 최소의 기름값을 따로 저장한다음 각 거리에다 곱해주면 된다 

그리디에서는 특정 값을 특정 변수에 누적하고, 조건에 따라 변경해주고 연산을 수행하면되는 것 같다

n=int(input())
distance = list(map(int,input().split()))
oil = list(map(int,input().split())) 

final = oil[0]
result=0

for i in range(n-1):
    if oil[i]<final:
        final=oil[i]
    result+=distance[i]*final
       	
print(result)

 

 

-틀린 풀이

i번째 주유소 값에 i부터 n-1까지 거리의 합을 곱한 값과 한점씩 이동한 기름값을 비교해서 최솟값을 구하려고 했는데,

이렇게 하면 값을 어떻게 누적해야할지 몰라서 어려웠다. 

결과적으로 이렇게 풀면 안된다는 얘기

 

n=int(input())
distance = list(map(int,input().split()))
oil = list(map(int,input().split()))

total=sum(distance) 

final =0
for i in range(n-1):
	final +=distance[i]*oil[i]

result=0
# 이전 값 그대로 이어가는 거 , 각자 더하는거
for i in range(n-1):
	if final >= total*oil[i]:
		result += distance[i]*oil[i]
	elif final < total*oil[i]:
		result += total*oil[i]
	
print(result)

 

-문제: 

 

생각해낸 풀이방법

숫자 받고, 정수로 리스트 만듦

내림차순으로 정렬한다(sort.(reverse=True)

끝 세자리수가 30의 배수이면 맞고, 아니면 -1 출력 (여기에서 오류가 났다)

 

--> 0이 있으면 2,5의 배수이기 때문에 0이 하나라도 있어야하고, 3의 배수이려면 끝 세자리 합이 3의 배수가 아니라

각 자리에 있는 모든 숫자의 합이 3의 배수가 되어야 한다 .

 

-정답 풀이:

data=list(input())
n=len(data)

check=0
for i in range(n):
    check+=int(data[i])
    
data.sort(reverse = True)

if check %3 ==0 and '0' in data:
    print(''.join(data))
else:
    print(-1)

 

-틀렸던 풀이

출력 초과가 났다. 내 예상으론 else문에 해당하는 건데 조건을 잘못 설정해서 if문으로 가서 -1보다 큰 값이 출력돼서 틀렸던 것 같다 

data=list(input())
n=len(data)
   
data.sort(reverse = True)
check = int(data[-3])*100 +int(data[-2])*10 + int(data[-1])

if check % 30 ==0:
    ans=''
    for i in range(n):
        ans+=data[i]
    print(ans)  
else: 
    print(-1)

-문제: https://www.acmicpc.net/problem/2217

 

로프 수용무게를 오름차순으로 정렬하면, i번째 로프를 기준으로 n까지 n-i개의 로프는 총 data[i] *(n-i)의 무게를 든다 

0번부터 n-1까지 탐색하면서 최댓값을 찾은 후 반환하면 된다. 

만약 로프 하나로 드는게 가장 큰 경우는 n-1 인덳 값이므로, 따로 반복문을 추가하지 않아도 된다 

silver4 문제

 

-정답풀이: 

n=int(input())
data=[]
for _ in range(n):
    data.append(int(input()))
data.sort()
answer=0
for i in range(n):
    answer=max(answer, data[i]*(n-i))
print(answer)

-문제: https://www.acmicpc.net/problem/1541

 

실버2 문제. 최소값을 구하려면 -오른쪽과 -왼쪽을 괄호를 쳐야한다고 생각했다. 

근데 여기서 영향을 받는 것은 -옆에있는 +라고 생각했다. 

그러려면 -를 기준으로 split해야겠다는 생각을 했다. 

그러면 ['55',' 50+40']의 형태인데 내가 원하는 건 [55, 90]이므로 +에 대해서도 한번 더 split을 한다음 더해줫다. 

그렇게 하니 한번에 정답이 떴다 

 

-정답풀이: 

data=list(input().split('-'))

for i in range(len(data)):
    result=list(map(int,data[i].split('+')))
    data[i]=sum(result)
    
answer = data[0]
for i in range(1,len(data)):
    answer-=data[i]
    
print(answer)

+ Recent posts