백준 1246번 - 온라인 판매

의혁·2024년 12월 26일
0

[Algorithm] 알고리즘

목록 보기
2/50

💡 오늘의 교훈: 조건을 항상 잘 생각하는 습관을 들이자!!

  • 처음에는 최대 수익 & 가장 낮은 금액을 보고 dfs나 bfs인가 생각하였지만, 문제를 읽어보면서 그렇게 어렵게 접근하지 않아도 되겠다고 생각했다.
  • 받아온 사용자별 가격을 내림차순으로 정렬한 후, (해당 가격 * 본인 포함 나머지 사람수)로 각 상황의 가격을 totalCost에 저장하고, 가장 가격이 높은 값을 선택하였다.
  • 하지만 위의 알고리즘에서 달걀의 갯수(N)가 사람의 갯수(M)보다 작은 경우를 생각하지 못하여 계속 정답을 맞출수 없었다.
  • 그래서 달걀의 갯수(N)가 사람의 갯수(M)보다 작은 경우에는 오름차순으로 정렬된 totalCost의 시작 지점을 M-N으로 두어서, totalCost에 저장하고, 가장 가격이 높은 값을 선택하였다.

N, M = map(int, input().split())

cost = []
totalCost = [0] * M

for _ in range(M):
    cost.append(int(input()))
    
sortCost = sorted(cost)    

# 달걀 갯수가 사람 수보다 많은 경우
if N >= M:
    for i in range(M):
        totalCost[i] = sortCost[i] * (M - i)
# 달걀 갯수가 사람 수보다 작은 경우
else:
    for j in range((M-N),M):
        totalCost[j] = sortCost[j] * (M - j)
        
print(sortCost[totalCost.index(max(totalCost))], max(totalCost))

💡 파이썬 index()
=> List내에서 값에 대한 index값을 찾을 때 사용한다.

array = [1, 2, 3, 4]

# 결과 값은 2가 나온다
print(array.index(3))

오프라인 코테 스터디 (12/30)
참가 인원: 기우석님

  • 풀이 방식
for (int i = 0; i < m; i++) {
		if (i >= n)
			break;
		if (ans < arr[i] * (i + 1)) {
			ans = arr[i] * (i + 1);
			ans_value = arr[i];
		}
	}
  • 나의 코드 처럼 totalCost 라는 배열을 따로 선언하지 않고, for문을 돌리면서 바로 max cost값과 cost값을 갱신하면서 최종 값을 도출하셨습니다.
  • 최대한 메모리와 시간복잡도를 고려해야한다.
profile
매일매일 차근차근 나아가보는 개발일기

0개의 댓글