문제
https://school.programmers.co.kr/learn/courses/30/lessons/17681
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
문제 풀이 과정은 다음과 같다
- 일단 리스트 안에 있는 숫자를 이진화 한 다음 숫자가 1일 때 #으로 표현한다.
- #으로 나타난 배열 arr1과 arr2의 요소를 서로 비교하여 #가 하나라도 있다면 #을 나타낸다.
여기서 문제을 풀 때, 주의해야 할 점은 아래와 같다.
- 입력의 지도의 길이 n이다.
- 이진화로 바꾼 숫자가 0일 경우에는 " " 빈 공간으로 처리해야 비교할 때 쉽다.
이를 파이썬 코드로 작성하면 다음과 같다.
import itertools
def solution(n, arr1, arr2):
# 숫자를 이진화한다음, #으로 변환하여 리스트로 반환하기
def translate(list):
case = []
for i in list:
temp = format(i, "b")
temp_str = ""
for j in temp:
if j == "1":
temp_str += "#"
else:
temp_str += " "
case.append(temp_str)
return case
# 각 리스트 변환
arr1 = translate(arr1)
arr2 = translate(arr2)
# 정답
answer = []
# 리스트 돌면서 #이 하나라도 있다면 합쳐서 처리하기
for a1, a2 in zip(arr1, arr2):
answer_str = ""
for a1_element, a2_element in zip(a1.zfill(n), a2.zfill(n)):
if a1_element == "#" or a2_element == "#":
answer_str += "#"
else:
answer_str += " "
answer.append(answer_str)
return answer
'Algorithm > Programmers' 카테고리의 다른 글
프로그래머스 LV1 대충 만든 자판 (0) | 2023.05.19 |
---|---|
프로그래머스 LV1 성격 유형 검사하기 (0) | 2023.05.17 |
프로그래머스 LV1 짝지어 제거하기 (0) | 2023.05.17 |
프로그래머스 LV1 신고 결과 받기 (0) | 2023.05.11 |
프로그래머스 LV1 신규 아이디 추천 (0) | 2023.05.11 |