프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제풀이
def solution(n, arr1, arr2):
# 이진수 표현을 저장할 리스트들 초기화
result1 = [] # arr1의 각 숫자를 이진수로 변환한 결과를 저장할 리스트
result2 = [] # arr2의 각 숫자를 이진수로 변환한 결과를 저장할 리스트
answer = [] # 최종 결과 문자열을 저장할 리스트
# arr1의 각 숫자를 이진수로 변환
for i in range(0, n):
tmp = arr1[i] # 현재 숫자를 tmp에 저장
number = '' # 현재 숫자의 이진수 표현을 저장할 문자열
# 길이 n의 이진수 문자열로 변환
for j in range(0, n):
# 현재 비트 위치를 계산하여 해당 비트가 1인지 확인
if tmp // 2**(n-j-1) == 1:
number += '1' # 1이면 '1'을 추가
tmp = tmp - 2**(n-j-1) # 해당 비트 값을 tmp에서 뺌
else:
number += '0' # 0이면 '0'을 추가
result1.append(number) # 변환된 이진수 문자열을 result1에 추가
# arr2의 각 숫자를 이진수로 변환
for i in range(0, n):
tmp = arr2[i] # 현재 숫자를 tmp에 저장
number = '' # 현재 숫자의 이진수 표현을 저장할 문자열
# 길이 n의 이진수 문자열로 변환
for j in range(0, n):
# 현재 비트 위치를 계산하여 해당 비트가 1인지 확인
if tmp // 2**(n-j-1) == 1:
number += '1' # 1이면 '1'을 추가
tmp = tmp - 2**(n-j-1) # 해당 비트 값을 tmp에서 뺌
else:
number += '0' # 0이면 '0'을 추가
result2.append(number) # 변환된 이진수 문자열을 result2에 추가
# result1과 result2의 이진수 표현을 결합하여 최종 맵 생성
for i in range(0, n):
word = '' # 현재 줄의 최종 문자열을 저장할 변수
for j in range(0, n):
# 두 이진수 문자열의 각 비트를 비교하여 최종 문자열 생성
if result1[i][j] == '0' and result2[i][j] == '0':
word += ' ' # 두 위치 모두 0이면 공백 추가
else:
word += '#' # 적어도 하나의 위치가 1이면 # 추가
answer.append(word) # 생성된 줄을 answer에 추가
return answer # 최종 결과 반환
정리
arr1, arr2의 각 요소들을 2^(n-1)부터 2^0까지 계속 나누었을 때 몫이 1이라면 1을 문자열에 더하고 tmp값에서 나눈 값만큼 빼고 나누는 과정 다시 반복
몫이 0이라면 이진수로 변환할 때 0을 문자열에 더하여 이진수로 변환
2^0까지 수행했다면 만들어진 number를 result1, result2에 맞게 append 그리고 다른 요소의 이진수를 구하기 위해 number 초기화
result1과 result2의 같은 위치를 비교하면서 모두 0일 때만 word 문자열에 ' '을 더해주고 그게 아닌 경우라면 '#' 을 더해준다. 그리고 한 줄이 끝나면 answer에 append 해주고 다시 word 문자열 초기화
문제를 다 풀고 나서 다른 풀이를 찾아보니 대부분의 사람들이 비트연산으로 푼 것을 확인하였음. 나는 이진수로 바꿔주는 bin함수에 대해 모르고 있어서 아예 생각조차 못함(이번 기회에 bin 함수에 대해 공부해 보자)
중간에 result1과 result2에 append 하는 과정에서 한 줄이 끝날 때마다 number = '' 를 빼먹는 바람에 number 문자열 초기화가 안되어서 result1과 result2를 정상적으로 만드는 데에 시간을 허비함
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 2023 KAKAO BLIND RECRUITMENT - 이모티콘 할인행사 (0) | 2024.06.10 |
---|---|
[프로그래머스] 2023 KAKAO BLIND RECRUITMENT - 택배 배달과 수거하기 (0) | 2024.06.10 |
[프로그래머스] 2019 카카오 개발자 겨울 인턴십 - 크레인 인형뽑기 게임 (0) | 2024.06.04 |
[프로그래머스] 2019 KAKAO BLIND RECRUITMENT - 실패율 (0) | 2024.06.04 |
[프로그래머스] 2024 KAKAO WINTER INTERNSHIP - 가장 많이 받은 선물 (0) | 2024.04.03 |