Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- class
- 자료구조
- MongoDB
- GIT
- flask
- nodejs
- TypeScript
- Bull
- 정렬
- cookie
- dfs
- nestjs
- AWS
- Dinosaur
- MySQL
- typeORM
- 게임
- jest
- Express
- Nest.js
- OCR
- JavaScript
- mongoose
- react
- Queue
- game
- Python
- 공룡게임
- Sequelize
Archives
- Today
- Total
포시코딩
[프로그래머스][Lv.0] [1차] 비밀지도 본문
728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/17681
내 풀이 - Python
def solution(n, arr1, arr2):
answer = []
for i in range(n):
a = int(format(arr1[i], 'b'))
b = int(format(arr2[i], 'b'))
c = a + b
c = str(c).replace('2', '1')
while len(c) < n:
c = '0'+c
c = c.replace('1', '#').replace('0', ' ')
answer.append(c)
return answer
처음에는 Python에서 십진수를 이진수로 나타내는법을 몰라 직접 함수를 만들었는데
format() 쓸 일이 많을 것 같아 연습삼아 써봤다.
이진수로 바꾼 두 값을 더했을 때 무조건 2 이상은 안되니까
더한 순간 2를 다 1로 바꾸고
마지막에 1 -> #, 0 -> 빈칸으로 바꾸는식으로 코드를 줄였다.
내 풀이 - Javascript
function solution(n, arr1, arr2) {
let answer = [];
arr1 = arr1.map((a)=>tenToTwo(a))
arr2 = arr2.map((a)=>tenToTwo(a))
for(let x=0;x<n;x++){
let sum = parseInt(arr1[x]) + parseInt(arr2[x]);
sum = sum.toString().padStart(n, '0').replace(/[2]/g, '1');
sum = sum.replace(/[1]/g, '#').replace(/[0]/g, ' ');
answer.push(sum);
}
function tenToTwo(target){
let result = '';
let temp = 0;
let remainder = 0;
while(true){
remainder = target % 2;
result = remainder + result;
temp = target-remainder;
if(temp == 0){
if(result.length != n){
result = result.padStart(n, '0');
}
return result;
} else {
target = temp / 2;
}
}
}
return answer;
}
예전에 푼 코드인데 여기선 이진수 만드는 함수를 직접 짜 풀었다 ㅋㅋ..
js에선 더 쉽게 이진수 만들 수 있는데 이땐 몰랐던거 같다.
또 padStart() 함수를 쓰고 있는데
파이썬에선 빈 자리를 while문 돌려서 0으로 채워줬다면 js에선 padStart로 채우는 모습을 볼 수 있다.
* (추가) Javascript의 padStart()를 Python에서는 rjust()로 똑같이 사용할 수 있다 - [링크]
다른 풀이
def solution(n, arr1, arr2):
answer = []
for i,j in zip(arr1,arr2):
print(i, j)
a12 = str(bin(i|j)[2:])
a12=a12.rjust(n,'0')
a12=a12.replace('1','#')
a12=a12.replace('0',' ')
answer.append(a12)
return answer
처음보는 함수들이 나온다.
zip(), rjust().. 따로 공부해봤다.
거기에 str(bin(i|j)[2:])로 쓰는 방식이며(비트연산자) 아직도 배울게 많다는걸 생각하게 한다.
728x90
'자료구조알고리즘 > 문제풀이' 카테고리의 다른 글
[프로그래머스][Lv.1] 두 정수 사이의 합 (0) | 2022.12.21 |
---|---|
[프로그래머스][Lv.1] 핸드폰 번호 가리기 (0) | 2022.12.21 |
[프로그래머스][Lv.0] 평행 - 작성중 (0) | 2022.12.19 |
[프로그래머스][Lv.0] 안전지대 (0) | 2022.12.18 |
[프로그래머스][Lv.0] OX퀴즈 (0) | 2022.12.17 |