https://school.programmers.co.kr/learn/courses/30/lessons/42583?language=csharp
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
using System;
using System.Collections.Generic;
using System.Linq;
public class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 0;
// 트럭들을 리스트로 변환
// -> 다리를 건너기 시작한 트럭은 리스트에서 제거하기 위함
List<int> truck_waiting = truck_weights.ToList<int>();
// 다리 위 트럭 무게의 합
int truck_weights_on_bridge = 0;
// 다리 위 각 위치에 있는 트럭 무게를 표시
int[] truck_on_bridge = new int[bridge_length];
// 트럭이 모두 지나가기 전까지 루프
while (true)
{
// 루프 1번당 시간 1초 카운트
answer++;
// 제일 앞에 있던 트럭이 빠져나가게끔
// 총 무게에서 가장 앞에 있던 트럭의 무게를 빼주고
truck_weights_on_bridge -= truck_on_bridge[truck_on_bridge.Length-1];
// 다리 위의 트럭을 한칸씩 앞으로 당겨주자
for (int i = truck_on_bridge.Length - 1; i > 0; i--)
{
truck_on_bridge[i] = truck_on_bridge[i - 1];
}
// 리스트에 남은 트럭이 없다면
if (truck_waiting.Count == 0)
{
// 다리 건너기 시작하는 위치의 무게는 0
truck_on_bridge[0] = 0;
}
// 리스트에 남은 트럭이 있을 때
else
{
// 다음 트럭이 올라가도 weight 이하라면
if (truck_weights_on_bridge + truck_waiting[0] <= weight)
{
// 다리의 0번째 위치에 새로 올라간 트럭의 무게
truck_on_bridge[0] = truck_waiting[0];
// 다리 위에 올라간 트럭들의 무게의 합에 새로 올라간 트럭의 무게를 더해주고
truck_weights_on_bridge += truck_waiting[0];
// 다리 위에 올라간 트럭은 대기 트럭 리스트에서 제거
truck_waiting.RemoveAt(0);
}
// 다리에 트럭이 무게 때문에 올라가지 못하는 경우
else
{
// 다리 0번째 위치는 트럭이 올라가지 못하고 무게 0
truck_on_bridge[0] = 0;
}
}
// 대기 중인 트럭이 없고, 다리 위의 트럭 무게 합이 0 -> 모든 트럭이 다리를 건너감
if (truck_waiting.Count == 0 && truck_weights_on_bridge == 0)
break;
}
return answer;
}
}
스텍이나 큐를 사용하여 푸는 문제라지만 게임 만드는 것처럼 시각화하여 풀어버렸다..
'프로그래머스' 카테고리의 다른 글
C# - 주식 가격 (0) | 2023.02.08 |
---|---|
C# - 점 찍기 (0) | 2023.02.01 |
C# - 개인정보 수집 유효기간 (0) | 2023.01.18 |
C# - H-Index (1) | 2023.01.11 |
C# - 숫자 카드 나누기 (0) | 2023.01.04 |