728x90
코드만 궁금한 분은 깃허브 링크 눌러주세요!
문제 설명 ㄱㄱ
17406번: 배열 돌리기 4
크기가 N×M 크기인 배열 A가 있을때, 배열 A의 값은 각 행에 있는 모든 수의 합 중 최솟값을 의미한다. 배열 A가 아래와 같은 경우 1행의 합은 6, 2행의 합은 4, 3행의 합은 15이다. 따라서, 배열 A의
www.acmicpc.net

문제 풀이 논리!
그냥... 주어진 대로 풀면 된다. 그래도 조금 팁을 주자면, 완전 탐색 문제인데 시간을 마구 쓸수는 없는 문제이다. 나는 처음에 근처 탐색을 모두 하고 조건에 맞는 요소들만 stack에 넣어서 풀었다. 한곳을 지정하면 어차피 시계방향이니까 스택에 주변의 요소를 넣을 때 시계방향으로 미리 순서를 지정해서 넣으면 원하는 요소만 숫자를 바꿀 수 있었다. 그런데이렇게 하면 시간초과가 나온다. 따라서 그냥 정해진 범위를 벗어날 때만 방향을 바꿔주는 형식으로 문제를 풀어야 시간내에 문제를 풀 수 있다. 이 또한 어차피 시계방향이라 푸는게 그렇게 어렵지 않다. 처음에 왜 이렇게 푸는걸 생각 못했지?ㅋㅋ 결국 남의 풀이를 또 살짝 참고해버렸다 흑.. 요새 내힘으로 푸는게 없는거같아 ㅜㅜ
next_r, next_c = cur[0]+dir[d][0], cur[1]+dir[d][1]
if next_r > r+size or next_r < r-size or next_c > c+size or next_c < c-size:
next_r, next_c = cur[0]-dir[d][0], cur[1]-dir[d][1]
d += 1
next_r, next_c = cur[0]+dir[d][0], cur[1]+dir[d][1]
dir은 미리 오른쪽 -> 아래 -> 왼쪽 -> 윗쪽 방향으로 움직이도록 설정해뒀다. 범위를 넘기면 다시 돌아와서 그 다음 방향으로 진행한다.
tmp = [next_r, next_c]
origin = grid[tmp[0]][tmp[1]]
grid[tmp[0]][tmp[1]] = prev
prev = origin
cur = tmp
if tmp == start:
break
이 부분은 이전 값을 저장해뒀다가 다음.. 부분에 설정하는 부분.
회전을 여러군데에서 하는 경우 회전 순서에 따라 최종 값이 달라지니까 모두 확인해야한다.
728x90
'코딩테스트 > 삼성 기출' 카테고리의 다른 글
| 백준 14503 로봇 청소기 파이썬 풀이 및 코드 (시뮬레이션 문제) (0) | 2022.10.07 |
|---|---|
| 백준 14891 톱니바퀴 코드, 해설(파이썬)/ 삼성기출, 실버1 구현문제 (0) | 2022.03.03 |
| 백준 17136 색종이 붙이기 풀이, 코드 (파이썬) 구현문제 / 삼성 A형 기출 (0) | 2022.01.05 |
| 백준 17135번 캐슬 디펜스 풀이/해설/코드 (파이썬) 삼성 A형 기출 (0) | 2021.09.24 |
| 백준 17070번 파이프 옮기기 1 문제 풀이/코드 해설 (파이썬) 삼성 A형 기출 (0) | 2021.09.24 |