코테합 빈출유형 스터디

[코딩 테스트 합격자 되기 파이썬 - 4주차]시뮬레이션

난쟁이 개발자 2025. 4. 27. 19:43
반응형

개념

  1. $N \times N$ 크기의 2차원 정수 행렬을 시계 방향으로 90도 회전시키는 기능을 구현한다고 가정해 봅시다. 각 행렬의 원소가 회전 후 어떤 새로운 위치로 이동해야 할지에 대한 좌표 변환 규칙 아이디어를 시뮬레이션하여 설명해주세요. 예를 들어, 원래 행렬의 (r, c) 위치에 있던 원소는 회전 후 어떤 (r', c')위치로 이동해야 할까요? 이 규칙을 일반화하여 설명하고, 이를 구현하기 위한 주요 단계를 논리적으로 나열해주세요.
    더보기
    2차원 정수 행렬을 시계방향으로 90도 회전하는 것을 일반화하면, A`[j, (N-1)-i] = A[i, j] 를 적용하면 90도 시계방향으로 회전한 배열을 얻을 수 있다. 이를 반대로 하면 반시계방향으로 90도 회전하는 배열을 얻을 수 있다. 
    책 문제 62번, 배열 회전하기를 참고하길 바란다.
  2. 2차원 평면 상에서 현재 위치 (x, y)에서 시작하여 '동', '서', '남', '북' 방향으로 특정 거리만큼 이동하는 명령들을 처리하는 기능을 구현한다고 가정해 봅시다. 각 이동 명령이 주어졌을 때, 현재 좌표를 어떻게 갱신해야 할지에 대한 좌표 갱신 아이디어를 시뮬레이션하여 설명해주세요. 여러 개의 이동 명령이 순차적으로 주어졌을 때, 최종 도착 좌표를 계산하기 위한 논리적인 처리 흐름을 설명하고, 이를 구현하기 위한 핵심적인 변수 관리 방안에 대한 아이디어를 제시해주세요.
    더보기
    현재 위치 (x, y) 에서 '동', '서', '남', '북' 방향으로 특정 거리만큼 이동하는 명령들을 처리하기 위해선 다양한 방법이 있을 수 있다. 만약 특정 명령어, 예를 들면 "left", "right", "up", "down" 과 같은 명령어들이 주어진다면, 딕셔너리 형태로 {"left" : [-1, 0]} 으로 주게 되면 x 기준 -1 만큼 이동하게 된다. 이는 우리가 중,고등학교때 배운 평면좌표를 기준으로 왼쪽으로 가기 때문에 쉽게 이해할 수 있을 것이다. 
    관련 문제로는 실전 문제 2번, 캐릭터의 좌표를 참고하길 바란다.

 

실전

1. 이진 변환

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

def solution(s):
    # 2진법 한 횟수, 제거한 0 갯수
    cnt_bin2 = cnt_rm = 0
    
    while s != '1' :
        cnt_bin2 += 1
        cnt_rm += s.count('0')
        s = bin(s.count('1'))[2:]
    
    answer = [cnt_bin2, cnt_rm]
    
    return answer

 

2. 캐릭터의 좌표

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

dr = {
    'left' : [-1, 0],
    'right' : [1, 0],
    'up' : [0, 1],
    'down' : [0, -1]
}

def solution(keyinput, board):
    limit_x = board[0] // 2
    limit_y = board[1] // 2

    x, y = 0, 0
    for key in keyinput :
        nx, ny = x + dr[key][0], y + dr[key][1]

        if -limit_x <= nx <= limit_x and -limit_y <= ny <= limit_y :
            x = nx
            y = ny

    answer = [x, y]
    return answer

 

시뮬레이션 문제의 경우, 문제를 읽고 특정 범위로 제한하거나, 문제 그대로 구현하는 경우가 많아 문제를 잘 읽고 구현하는 것이 중요하다. 

사실 이 두 문제 모두 문제에서 제시한 사항들을 잘 구현해내는 것이 중요했다. 첫 번째 문제의 경우, 문제 그대로 구현하는 경우에 해당하고, 두 번째 문제는 특정 범위를 제한하는 문제이다.

개념 문제는 추후에 보겠습니다...

반응형