C# - 다리를 지나는 트럭

2023. 1. 25. 21:43·프로그래머스

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
'프로그래머스' 카테고리의 다른 글
  • C# - 주식 가격
  • C# - 점 찍기
  • C# - 개인정보 수집 유효기간
  • C# - H-Index
ybbro
ybbro
대부분의 포스팅은 pc에서 작성되었습니다. 모바일에서 볼 때 설명이 잘리면 데스크탑 모드를 사용해보길 바랍니다.
  • ybbro
    어떻게든 굴리는 게임 공방
    ybbro
  • 전체
    오늘
    어제
    • 전체 N
      • 스파르타코딩클럽_Unity개발과정 N
      • Unity 2D
        • 카드게임
        • 플랫포머 게임
        • 뱀서라이크
      • Unity 3D
        • 닷지
        • 유니티 짱
        • 디펜스 게임
      • Unity 에러 노트
      • 기능 구현 방법 정리
      • 셰이더 그래프
        • 2D
        • 3D
      • 프로그래머스
      • 자료구조
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    무료스킨
    대시
    64비트
    스파인
    UI
    hello
    삭제
    마스크
    세이브
    직렬화
    갤럭시 S24
    유니티 애니메이터 파라미터 초기화
    앱이 휴대전화와 호환되지 않아 설치되지 않았습니다
    텍스트매시프로
    잔상
    sprite mask
    룰렛
    unity
    다크모드
    유니티
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
ybbro
C# - 다리를 지나는 트럭
상단으로

티스토리툴바