0. 문제
링크) https://programmers.co.kr/learn/courses/30/lessons/17681
코딩테스트 연습 - [1차] 비밀지도
비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다
programmers.co.kr
1. 알고리즘 계획
- 정수값을 이진수로 가공한다.
- for문을 돌면서 규칙에 해당하는 값으로 새로운 리스트르 만든다.
- 다른 for문에서 새로운 리스트를 돌면서 값을 변화시켜준다.
2. 나의 코드
def solution(n, arr1, arr2):
ls2 = []
answer = []
# 정수 가공
tmp1 = ['0'*(n-len(format(i,'b')))+format(i,'b') if len(format(i,'b')) != n else format(i, 'b') for i in arr1]
tmp2 = ['0'*(n-len(format(i,'b')))+format(i,'b') if len(format(i,'b')) != n else format(i, 'b') for i in arr2]
# for문
for x, y in zip(tmp1, tmp2):
ls = ['0' if (int(x[i])+int(y[i])) == 0 else '1' for i in range(len(tmp1))]
ls2.append(ls)
for v in ls2:
ls3 = ['#' if v[i] == '1' else ' ' for i in range(len(v))]
answer.append("".join(ls3))
return answer
- foramt(정수, 'b')를 하면 정수가 이진수로 바뀐다고 한다.
- 이전의 코드에서 배운 zip함수를 사용해 두 리스트를 한 개의 for문에서 돌려봤다.
3. 다른 사람의 코드
def solution2(n, arr1, arr2):
answer = []
for i, j in zip(arr1, arr2):
a12 = str(bin(i | j)[2:])
print(a12)
a12 = a12.rjust(n, '0')
a12 = a12.replace('1', '#')
a12 = a12.replace('0', ' ')
answer.append(a12)
return answer
- 굉장히 간단하게 문제를 해결했다.
- str(bin(arr1[i]|arr2[i]))[2:] #핵심코드라고 생각한다.
└ bin()함수를 사용하게 되면 앞에 두 단어 '0b'가 붙는다.
- rjust(길이, '값'): str값이 주어진 '길이'에 부족하면 '값' 을 앞에다가 채워준다.
└ 정수 '1'의 경우 이진수도 '1'이기 때문에 앞에 '0'을 채워줘야 한다.
- replace(): 해당 값을 다른 값으로 변경
4. 정리 및 리뷰
- 확실히 코드를 간략화해보고, 다양한 함수를 사용해본 사람은 코드의 길이와 속도의 차이가 확실히 난다고 생각한다.
- 다양한 함수들에 대해 이해하고 외워둬야겠다.
- 그래도 아예 코딩테스트를 하기 전에는 엄두도 내지 못했을 문제였다고 생각하니, 많이 성장했다는 생각이 들었다.
코드 만족도: ★★★★☆
'알고리즘_코딩테스트 > 프로그래머스_Level1' 카테고리의 다른 글
| 39. 다트확률 구하기 (0) | 2020.09.12 |
|---|---|
| 38. 실패율 (1) | 2020.09.12 |
| 36. 예산 (0) | 2020.09.12 |
| 35. 별 찍기 (0) | 2020.09.12 |
| 34. X만큼 간격이 있는 n개의 숫자 (2) | 2020.09.12 |