728x90
[문제]
2018 KAKAO BLIND RECRUITMENT [1차] 비밀지도
https://school.programmers.co.kr/learn/courses/30/lessons/17681
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[코드]
- 먼저 생각한 풀이 방법은 다음과 같다.
- step 1. 10진수를 2진수로 변환한다. (n자리 수 맞춰주기)
- step 2. 2진수끼리 논리연산(OR)을 사용해서 벽의 유무를 확인한다.
- step 3. 1은 #, 0은 공백으로 바꾼 후 출력한다.
- 10진수인 상태에서 논리연산을 해주고, 2진수를 변환하면 한 번에 step 1, 2를 해결할 수 있었다.
arr = []
for i in range(n):
arr.append(bin(arr1[i]|arr2[i])[2:])
- 그리고 다음과 같이 출력
for i in range(n):
tmp = ''
for j in arr[i]:
if j == '1':
tmp += '#'
else:
tmp += ' '
answer.append(tmp)
print(answer)
- 테스트케이스가 1개만 통과되어 보니 변환한 2진수를 n자리 수로 맞춰주지 않아 공백 출력이 되지 않았다.
- 그리고 for문이 같길래 합칠 수 있을 거라 생각해서 코드를 수정했다.
최종 코드
#최종 코드
def solution(n, arr1, arr2):
answer = []
for i in range(n):
# 논리 연산(OR) 후, 2진수로 변환 / 변환하면 맨앞에 0b가 붙어서 나오는 걸 떼준다.
row = bin(arr1[i]|arr2[i])[2:]
# 2진수 n자리 맞춰주기
if len(row) < n:
row = (n-len(row)) * '0' + row
# 1은 #로 변환, 0은 공백으로 변환해서 answer 배열에 추가
tmp = ''
for j in row:
if j == '1': tmp += '#'
else: tmp += ' '
answer.append(tmp)
return answer
반응형
'🚩 Coding Test > Programmers' 카테고리의 다른 글
[Programmers][Python] Lv.1 콜라 문제 (0) | 2024.06.18 |
---|---|
[Programmers][Python] Lv.1 신규 아이디 추천 (0) | 2024.06.16 |
[Programmers][Python] Lv.1 다트 게임 (1) | 2024.06.16 |
[Programmers][Python] Lv.1 실패율 (0) | 2024.06.16 |
[Programmers][Python] Lv.1 푸드 파이트 대회 (0) | 2024.06.14 |