이번 글은 '이것이 취업을 위한 코딩테스트다' 내의 문제를 풀고 정답 코드를 정리한 것입니다.
이것이 취업을 위한 코딩 테스트다 with 파이썬 | 나동빈 - 교보문고
이것이 취업을 위한 코딩 테스트다 with 파이썬 | IT 취준생이라면 누구나 입사하고 싶은 카카오ㆍ삼성전자ㆍ네이버ㆍ라인! 취업의 성공 열쇠는 알고리즘 인터뷰에 있다!IT 취준생이라면 누구나
product.kyobobook.co.kr
이번 문제는 아래 링크에 접속해서 풀어볼 수 있습니다.
https://school.programmers.co.kr/learn/courses/30/lessons/60059
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제


정답 코드
답안 1
파이썬 Ver.
자바스크립트 Ver.
답안 2
파이썬 Ver.
자바스크립트 Ver.
문제 풀이
이 문제의 핵심은 2차원 배열로 주어진 열쇠를 어떻게 90도 회전시키는가 하는 점이다. 그리고 열쇠가 자물쇠에 들어맞는지 확인하기 위해 중앙에 놓인 자물쇠의 끝과 열쇠가 최소 1칸은 겹치는 크기의 배열을 생성해놓아야 한다. 이후 배열을 반복문으로 탐색하며 열쇠를 회전시키고, 열쇠의 요소와 자물쇠의 요소를 하나씩 더해 만들어진 자물쇠 내 요소가 모두 1이라면 True를 반환하고 아니라면 False를 반환한다.
나의 경우 열쇠가 m * m 크기로 만들어진다는 점을 간과했고 열쇠를 확인한 후의 후처리도 하지 않았다.
다른 사람이 작성한 두 답안 모두 원리는 같으나 열쇠 회전 함수가 조금 다르다. 교재 내 답안은 함수를 한 번 실행할 때마다 열쇠를 90도 돌린 결과 반환하고 이 결괏값을 기존 열쇠에 대체하도록 되어 있다. 2번 답안은 반복문의 횟수에 따라 각도별로 열쇠를 회전시키게끔 되어 있다.
열쇠를 회전하는 식을 작성하는 방법과 중첩 반복문이 어떻게 돌아가는지만 안다면 충분히 풀 수 있는 문제다.
2차원 배열을 90도 회전시키는 여러 방법
1. 반복문 활용
list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] row = len(list) col = len(list[0]) new_list = [[0] * row for _ in range(col)] for i in range(row): for j in range(col): new_list[j][row - i - 1] = list[i][j] print(list) # [[1, 2, 3], [4, 5, 6], [7, 8, 9]] print(new_list) # [[7, 4, 1], [8, 5, 2], [9, 6, 3]]
[시계 방향 90도 회전 전]
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
[시계 방향 90도 회전 후]
[7, 4, 1]
[8, 5, 2]
[9, 6, 3]
회전 전과 회전 후 배열을 살펴보면 아래와 같은 규칙을 발견할 수 있다.
회전 후의 행 = 회전 전의 열
회전 후의 열 = 행의 길이 - i(행 탐색값) - 1
숫자 1을 예로 들자면 회전 전 좌표는 (0, 0)이었으나 회전 후 (0, 2)으로 바뀐다.
즉 회전 후의 행(0) = 회전 전의 열(0), 회전 후의 열(2) = 행의 길이(3) - 행 탐색 값(0) - 1 로서 규칙이 성립함을 볼 수 있다.
2. zip 메서드 활용
2차원 배열을 시계 방향으로 회전시킬 때 zip 메서드를 이용하면 보다 간단하게 코드를 작성할 수 있다. zip 메서드에 대한 자세한 설명은 다음 링크를 참조 바란다.
같이 보기
- zip 메서드
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[python] zip() 으로 배열 회전
python 내장함수 zip()
velog.io
- 2번 답안 해설 영상
'👩💻 Programming > Coding Test 문제 풀이' 카테고리의 다른 글
| [프로그래머스] level 3 기둥과 보 설치(파이썬/자바스크립트) (0) | 2022.12.18 |
|---|---|
| [Baekjoon] 3190 뱀(파이썬/자바스크립트/NodeJS) (0) | 2022.12.15 |
| [프로그래머스] level 2 문자열 압축(파이썬/자바스크립트) (0) | 2022.12.13 |
| [이코테] 구현_럭키 스트레이트(파이썬/자바스크립트) (0) | 2022.12.12 |
| [이코테] 구현_게임 개발(파이썬/자바스크립트) (0) | 2022.12.12 |
댓글