[프로그래머스] 공 이동 시뮬레이션

2023. 8. 22. 19:02·Coding Test/programmers
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/87391

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

분석

  • 1 ≤ n ≤ 109, 1 ≤ m ≤ 109 ➔ 문제대로 시뮬레이션 하면 시간초과
  • 쿼리를 역순으로 돌면서 반대 방향으로 시작점 찾아가기
  • 공들이 쿼리를 진행한 후에 모여 있을 수 있는 영역은 연속한 직사각형

command dx sr sc er ec
2
(행감소 → 행증가)
1 0 0 1 0
0
(열감소 → 열증가)
1 0 0 1 1
1
(열증가 → 열감소)
1 0 0 1 1
0
(열감소 → 열증가)
1 0 0 1 1
2
(행감소 → 행증가)
1 0 0 1 1

(er-sr+1)*(ec-sc+1) = 4

 

풀이

"""
n × m개의 가능한 시작점에 대해서 해당 시작점에 공을 두고 queries 내의 쿼리들을 순서대로 시뮬레이션했을 때,
x행 y열에 도착하는 시작점의 개수
"""
def solution(n, m, x, y, queries):
    sr,sc,er,ec = x,y,x,y

    # queries 역순으로
    for command, dx in reversed(queries):

        if command == 0: # 좌
            if sc==0:
                ec=min(m-1, ec+dx)
            else: 
                if sc+dx >= m: return 0
                sc = min(m-1, sc+dx)
                ec = min(m-1, ec+dx)

        elif command == 1: # 우
            if ec == m-1:
                sc = max(0, sc-dx)
            else:
                if ec-dx < 0: return 0
                sc = max(0, sc-dx)
                ec = max(0, ec-dx)

        elif command == 2: # 상
            if sr == 0: 
                er = min(n-1, er+dx)
            else: 
                if sr+dx >= n: return 0 
                sr = min(n-1, sr+dx)
                er = min(n-1, er+dx)

        else:  # 하
            if er == n-1:
                sr = max(0, sr-dx)
            else:
                if er+dx < 0: return 0 
                sr = max(0, sr-dx)
                er = max(0, er-dx)

    return (er-sr+1)*(ec-sc+1)

 

 

728x90
'Coding Test/programmers' 카테고리의 다른 글
  • [프로그래머스] 금과 은 운반하기 (이분 탐색)
  • [프로그래머스] 로또의 최고 순위와 최저 순위
  • [프로그래머스] 고고학 최고의 발견
  • [프로그래머스] 시험장 나누기 (이분탐색)
Karla Ko
Karla Ko
𝘾𝙤𝙣𝙩𝙞𝙣𝙪𝙤𝙪𝙨𝙡𝙮 𝙄𝙢𝙥𝙧𝙤𝙫𝙞𝙣𝙜, 𝘾𝙤𝙣𝙨𝙩𝙖𝙣𝙩𝙡𝙮 𝘿𝙚𝙫𝙚𝙡𝙤𝙥𝙞𝙣𝙜 𝙔𝙚𝙨!
    250x250
  • Karla Ko
    karlaLog
    Karla Ko
  • 전체
    오늘
    어제
    • Total (467)
      • Spring (19)
      • JPA (4)
      • Cloud & Architecture (15)
        • Kubernetes (5)
        • Docker (3)
        • MSA (2)
        • GCP (1)
        • AWS (4)
      • Devops (1)
      • Message Queue (4)
        • Kafka (2)
        • RabbitMQ (2)
      • Git (4)
      • DB (4)
      • Java (9)
      • Python (4)
      • CS (11)
        • OS (8)
        • Network (2)
        • Algorithm (1)
      • Coding Test (392)
        • programmers (156)
        • Graph (43)
        • DP (37)
        • Search (31)
        • Tree (13)
        • Data Structure (26)
        • Combination (12)
        • Implement (18)
        • Geedy (23)
        • Sort (7)
        • Math (21)
        • geometry (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준
    스택
    구간합
    자료구조
    최소신장트리
    최대공약수
    그래프
    최단거리
    파이썬
    정렬
    구현
    월간코드챌린지
    동적계획법
    덱
    그리디
    조합
    LIS
    Algorithm
    알고리즘
    트리
    힙
    BFS
    재귀
    이분탐색
    DP
    프로그래머스
    DFS
    다익스트라
    큐
    플로이드워셜
  • hELLO· Designed By정상우.v4.10.3
Karla Ko
[프로그래머스] 공 이동 시뮬레이션
상단으로

티스토리툴바