[문제 링크] 👇
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이 방법
- 입력받은 배열을 한 줄씩 순회하며, arr1과 arr2에서 동일한 위치에 있는 숫자 i와 j를 함께 다룬다.
- i와 j를 각각 n자리 이진수 문자열로 변환한다. 여기서 i를 이진수로 바꾼 후, n자리 형식으로 맞추기 위해 0을 앞에 추가해 준다.
- 변환한 두 이진수 문자열을 한 자리씩 비교
- 같은 위치에 있는 두 비트 값이 둘 중 하나라도 1이면 해당 위치를 #으로,
- 둘 다 0이면 공백으로 바꾸어 bin_str에 추가
- bin_str이 완성되면 한 줄의 지도가 생성된 것이므로, 이를 answer에 추가
- 모든 줄에 대해 반복한 후 answer를 반환하여 전체 지도를 완성
이진수 변환 후, n 자리 형식에 맞추는 방법
format(i, f'0{n}b')
- i 는 배열에서 꺼낸 정수이다.
- f-string을 통해 i 를 2진수로 변환하는데, {n}을 삽입해 n 자리 형식에 맞춘다.
- b는 2진수를 나타내는 문자이다.
Solution
def solution(n, arr1, arr2):
answer = []
# 배열 2진수로 변환, 한 줄 씩
for i, j in zip(arr1, arr2):
bin_str = ''
for first, second in zip(format(i, f'0{n}b'), format(j, f'0{n}b')):
for f, s in zip(first, second):
if f == '1' or s == '1':
bin_str += '#'
else:
bin_str += ' '
answer.append(bin_str)
return answer
개선할 점
이 코드는 주어진 두 배열 arr1과 arr2를 각각 이진수로 변환하여, 두 값을 비트 OR 연산으로 합쳐가며 벽과 공백을 표현한다. 다만 코드 내 불필요한 중첩 반복문을 줄일 수 있다. 또한, format()을 사용한 2진수 변환과 비트 연산을 결합하여 더 간단하게 작성할 수 있다.
개선된 코드
def solution(n, arr1, arr2):
answer = []
for i, j in zip(arr1, arr2):
# 두 값을 OR 연산한 후 n자리 2진수로 변환하여 #과 공백으로 매핑
bin_str = format(i | j, f'0{n}b').replace('1', '#').replace('0', ' ')
answer.append(bin_str)
return answer
'프로그래머스 코딩테스트 > Level 1' 카테고리의 다른 글
[Programmers] L1. 카드 뭉치 (Python) (2) | 2024.11.16 |
---|---|
[Programmers] L1. 추억 점수 (Python) (1) | 2024.11.16 |
[Programmers] L1. 푸드 파이트 대회 (Python) (0) | 2024.11.11 |
[Programmers] L1. 콜라 문제 (Python) (0) | 2024.11.07 |
[Programmers] L1. 모의고사 (완전탐색/Python) (0) | 2024.11.06 |