[백준] 28457 - Every? Only One's Marble (G1)

2023. 8. 27. 15:43·알고리즘 (PS)/BOJ
반응형

https://www.acmicpc.net/problem/28457

 

28457번: Every? Only One's Marble

첫 번째 줄에는 보드의 크기 $n$, 시작 시 가지는 돈 $S$, 시작점을 지나면 받게 되는 월급 $W$, 황금 열쇠 카드의 개수 $G$가 주어진다. ($3\leq n\leq 10$, $1\leq G\leq 4n-8$, $1\leq S,W\leq 10^7$) 그다음 $G$개의

www.acmicpc.net

 

부루마블 게임을 구현하는 문제다.

그래도 플레이어가 1명이라 구현 난이도가 엄청 높진 않다.

(플레이어가 여러명인 Yut Nori 같은 문제 구현에 비하면..)

 

구현할 때 다음과 같은 2가지 사항에 주의해야했다.

 

1. 보드의 사이즈가 작을 때는 주사위 한번으로 2바퀴를 돌 수도 있다.

=> 월급을 w 만큼 주지 말고, 이동 후 pos를 보드사이즈로 나눈 몫을 w에 곱해서 월급을 주도록 한다.

 

2. 골드 카드로 이동하는 경우, 이동 후에 즉시 행동을 해야한다.

나는 처음에 행동을 구현할 때 각 행동이 끝나면 continue 를 해서 다음 주사위 입력을 받도록 했었는데,

이걸 골드 카드의 이동 후 행동 부분에 그대로 적용했더니,

continue 때문에 gold 카드의 인덱스를 올리지 않는 문제가 발생해서 틀렸었다.

 

클래스를 이용해서 코드를 짰다면 좀 더 깔끔했을 것 같다.

n, s, w, g = map(int, input().split())
gold_cards = []
for _ in range(g):
    a, b = map(int, input().split())
    gold_cards.append((a, b))
board = ['s']
for i in range(4*n-8):
    if i == n-2:
        board.append('m')
    elif i == 2*n-4:
        board.append('f')
    elif i == 3*n-6:
        board.append('t')
    info = input().split()
    if info[0] == 'G':
        board.append('g')
    else:
        board.append(int(info[1]))

gold_cards_idx = 0
pos = 0
money = s
muindo_count = 0
fund = 0

I = int(input())
for _ in range(I):
    a, b = map(int , input().split())
    if muindo_count > 0: # 무인도에 갇혀있을 때
        if a == b:
            muindo_count = 0 # 탈출 후 주사위 한번더 굴리기
            continue
        else:
            muindo_count -= 1
            continue
    pos += (a+b)
    if pos >= len(board):
        money += w*(pos//len(board)) # 월급 지급
        pos %= len(board)
    if board[pos] == 'm': # 무인도 방문
        muindo_count = 3
    elif board[pos] == 'f': # 사회복지기금 방문
        money += fund
        fund = 0
    elif board[pos] == 't':
        pos = 0
        money += w
    elif board[pos] == 'g':
        cmd, x = gold_cards[gold_cards_idx]
        if cmd == 1:
            money += x
        elif cmd == 2:
            money -= x
            if money < 0:
                print('LOSE')
                exit(0)
        elif cmd == 3:
            money -= x
            fund += x
            if money < 0:
                print("LOSE")
                exit(0)
        elif cmd == 4:
            pos += x
            if pos >= len(board): # 조건상 이걸로 한바퀴 이상 못 돈다.
                money += w*(pos//len(board))  # 월급 지급
                pos %= len(board)
            if board[pos] == 'm':  # 무인도 방문
                muindo_count = 3
            elif board[pos] == 'f':  # 사회복지기금 방문
                money += fund
                fund = 0
            elif board[pos] == 't':
                pos = 0
                money += w
            elif board[pos] == 's':
                pass
            else:
                if money >= board[pos]:
                    money -= board[pos]
                    board[pos] = 0

        gold_cards_idx += 1
        gold_cards_idx %= g
    elif board[pos] == 's':
        pass # 월급 처리는 이동 하면서 이미 했음
    else:
        if money >= board[pos]:
            money -= board[pos]
            board[pos] = 0

left = sum([board[i] for i in range(4*n-4) if isinstance(board[i], int)])

if left == 0:
    print("WIN")
else:
    print("LOSE")
반응형
저작자표시 비영리 변경금지 (새창열림)

'알고리즘 (PS) > BOJ' 카테고리의 다른 글

[백준] 9370 - 미확인 도착지 (G2)  (0) 2023.10.02
[백준] 28458 - Mahjong Tenpai (P5)  (0) 2023.08.27
[백준] 3015 - 오아시스 재결합 (P5)  (0) 2023.07.04
[백준] 17299 - 오등큰수 (G3)  (0) 2023.07.04
[백준] 2485 - 가로수 (S4)  (0) 2023.07.04
'알고리즘 (PS)/BOJ' 카테고리의 다른 글
  • [백준] 9370 - 미확인 도착지 (G2)
  • [백준] 28458 - Mahjong Tenpai (P5)
  • [백준] 3015 - 오아시스 재결합 (P5)
  • [백준] 17299 - 오등큰수 (G3)
에버듀
에버듀
개발은 좋은데 뭘로 개발할까
  • 에버듀
    Blog. 에버듀
    에버듀
  • 전체
    오늘
    어제
    • 분류 전체보기 (614)
      • 개인 프로젝트 (43)
        • 토이 프로젝트 (3)
        • [2020] 카카오톡 봇 (9)
        • [2021] 코드악보 공유APP (22)
        • [2022] 유튜브 뮤직 클론코딩 (9)
        • [2025] 한글 SQL 데이터베이스 (0)
      • 팀 프로젝트 (22)
        • [2020] 인공지능 숫자야구 (4)
        • [2022] OSAM 온라인 해커톤 (10)
        • [2024] GDSC 프로젝트 트랙 (6)
        • [2025] 큰소리 웹 페이지 (2)
      • CS (335)
        • 자료구조 (19)
        • 어셈블리 (41)
        • 멀티미디어응용수학 (7)
        • 컴퓨터 구조 (29)
        • 알고리즘 분석 (4)
        • 컴퓨터 네트워크 (38)
        • 프로그래밍언어론 (15)
        • HCI 윈도우즈프로그래밍 (26)
        • 기초데이터베이스 (29)
        • 운영체제 (23)
        • 오토마타 (24)
        • 문제해결기법 (11)
        • 블록체인 (22)
        • 소프트웨어공학 (21)
        • 기계학습심화 (12)
        • 컴퓨터그래픽스와 메타버스 (8)
        • 분산시스템특론 (6)
      • 자기계발 (44)
        • 생각 정리 (22)
        • 대외활동 (11)
        • 동아리 (7)
        • 자격증 (3)
        • 머니 스터디 (1)
      • 알고리즘 (PS) (107)
        • BOJ (101)
        • Programmers (5)
        • 알고리즘 이모저모 (1)
      • WEB(BE) (8)
        • express.js (1)
        • Spring & Spring Boot (7)
      • WEB(FE) (2)
        • html, css, js (1)
        • React.js (1)
      • Tool & Language (6)
        • Edit Plus (1)
        • Git (1)
        • Python3 (2)
        • Java (2)
      • Infra (12)
        • AWS (1)
        • Oracle Cloud (8)
        • Firebase (2)
        • Network (1)
      • Android (18)
        • Java (6)
        • Flutter (12)
      • Window (2)
        • Visual Studio 없이 WPF (1)
        • MFC (1)
      • 독서 (14)
        • Inside Javascript (7)
        • Database Internals (6)
        • 한 글 후기 (1)
  • 링크

    • github
    • website
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
에버듀
[백준] 28457 - Every? Only One's Marble (G1)
상단으로

티스토리툴바