Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 백준
- 금융문자분석경진대회
- PYTHON
- Baekjoon
- SW Expert Academy
- 코로나19
- Git
- 파이썬
- Real or Not? NLP with Disaster Tweets
- 편스토랑
- Kaggle
- gs25
- ChatGPT
- github
- 편스토랑 우승상품
- ubuntu
- Docker
- 프로그래머스 파이썬
- 캐치카페
- programmers
- 맥북
- AI 경진대회
- leetcode
- 자연어처리
- 프로그래머스
- dacon
- 우분투
- 데이콘
- hackerrank
- 더현대서울 맛집
Archives
- Today
- Total
솜씨좋은장씨
[Programmers] 2018 KAKAO BLIND RECRUITMENT - 1차 - 비밀지도 (Python) 본문
Programming/코딩 1일 1문제
[Programmers] 2018 KAKAO BLIND RECRUITMENT - 1차 - 비밀지도 (Python)
솜씨좋은장씨 2021. 11. 8. 11:05728x90
반응형
코딩 1일 1문제! 오늘의 문제는 프로그래머스의 2018 KAKAO BLIND RECUITMENT 1차 비밀지도 입니다.
👨🏻💻 문제 풀이
문제를 딱 본 순간 이진수로 변환 한 수들을 비트연산자를 활용하여 계산하고 이를 활용하여 정답을 만들면 되겠다
생각이 들었습니다.
문제에서 설명하는 그림을 보면
맨 오른쪽에 # 이 그려져 있는 부분을 보면 왼쪽 두 그림 속 # 의 위치를 겹친 모습입니다.
그런데 #의 위치는 1의 위치이므로 0과 0일때만 0이고 나머지의 경우에는 1인 OR 연산자를 활용하기로 생각했습니다.
먼저 입력 받는 값은 정수이므로 비트연산자를 활용하기 위해서는 각 숫자를 이진수로 바꾸는 과정이 필요했습니다.
def convert_num_to_bin(n, num):
binary_num = bin(num)[2:]
if len(binary_num) < n:
ext_num = n - len(binary_num)
binary_num = "0" * ext_num + binary_num
return binary_num
정수를 이진수로 바꾸는데에는 bin을 활용했습니다.
bin을 활용하여 바꾼 이진수에는 0b로 시작하는 문자열이므로 앞에 0b를 제거하기 위해 [2:] 를 활용했습니다.
거기에 길이를 n으로 맞추기 위해서 입력받은 n과 변환한 이진수의 길이를 뺀 만큼
변환한 이진수 앞에 0을 붙여주었습니다.
arr1 = [convert_num_to_bin(n, num) for num in arr1]
arr2 = [convert_num_to_bin(n, num) for num in arr2]
위에서 만든 함수를 활용하여 입력받은 arr1과 arr2의 값을 이진수로 변환합니다.
for arr1_num, arr2_num in zip(arr1, arr2):
temp = ''
for num1, num2 in zip(arr1_num, arr2_num):
num3 = bin(int(num1) | int(num2))[2:]
if num3 == "1":
temp += "#"
else:
temp += " "
answer.append(temp)
변환한 값들에서 하나씩 꺼내온 후에 각 자리의 수를 OR연산자를 활용하여 값을 구한 다음
구한 값이 1일 경우 정답 문자열에 #을 0일 경우 문자열에 공백을 추가하였습니다.
이렇게 만든 문자열을 정답 리스트에 append 해주면 끝!
전체 코드는 아래를 참고해주세요.
👨🏻💻 코드 ( Solution )
def convert_num_to_bin(n, num):
binary_num = bin(num)[2:]
if len(binary_num) < n:
ext_num = n - len(binary_num)
binary_num = "0" * ext_num + binary_num
return binary_num
def solution(n, arr1, arr2):
answer = []
arr1 = [convert_num_to_bin(n, num) for num in arr1]
arr2 = [convert_num_to_bin(n, num) for num in arr2]
for arr1_num, arr2_num in zip(arr1, arr2):
temp = ''
for num1, num2 in zip(arr1_num, arr2_num):
num3 = bin(int(num1) | int(num2))[2:]
if num3 == "1":
temp += "#"
else:
temp += " "
answer.append(temp)
return answer
'Programming > 코딩 1일 1문제' 카테고리의 다른 글
[SW Expert Academy] 1926번 : 간단한 369게임 (Python) (0) | 2021.11.10 |
---|---|
[BaekJoon] 2309번 : 일곱 난쟁이 (Python) (0) | 2021.11.09 |
[Programmers] 월간 코드 챌린지 시즌3 - 나머지가 1이 되는 수 찾기 (Python) (0) | 2021.11.07 |
[BaekJoon] 1550번 : 16진수 (Python) (0) | 2021.11.06 |
[BaekJoon] 10936번 : BASE64 디코딩 (Python) (0) | 2021.11.05 |
Comments