프로그래머스 2018 카카오 - 비밀지도

Jamwon·2021년 6월 27일
0

알고리즘

목록 보기
11/18
post-thumbnail

문제링크

n개의 길이의 배열의 숫자를 2진수로 바꿔서 그 2진수를 1010101010 이면 1인것을 #으로 바꿔서 2차원 배열에 넣으면 되는 문제이다.

입력은 이런식인데 각 arr1과 arr2가 반환한 2진수의 수를 비트연산자로 연산해서 겹치는 arr을 만들수 있다.

문제를 풀다가 n의 갯수로 for 문을 돌리게되었는데 그러다 보니깐 나중에 2진수로 바꿀때 숫자의 길이가 n보다 작으면 index error가 생겼다.

그래서 결국 30분 만에 못풀없다... (rjust를 몰라서 그랬다..)

def solution(n, arr1, arr2):
    answer = []

    for i, j in zip(arr1, arr2):
        binary = str(bin(i | j)[2:])
        binary = binary.rjust(n, '0')
        binary = binary.replace("1", '#')
        binary = binary.replace('0', ' ')
        answer.append(binary)

    return answer

결국 참조해서 얻어낸 답.
bin() 함수를 이용해서 2진수로 변환하는데 bitwise 연산자를 이용해서 '|' <- 이거!
각자 1이 있으면 1의 값을 반환해주는 즉 두 배열을 겹치게 해준다.

그리고 [2:]를 해준이유는 bin() 함수를 이용하면 앞에 2진수임을 알려주는 0b가 붙기 때문에 잘라서 사용해야한다.

zip()

여러개의 객체를 인자로 받아서 객체가 담고있는 원소를 tuple의 형태로 순서대로 접근할 수 있는 iterator를 반환!

따라서 arr1 과 arr2를 한꺼번에 사용할 수 있다.

rjust()

문자열을 정렬해주는 함수이다.
예시로

txt = "abc".rjust(5,"0") 
print(txt)

이런식으로 작성하면 00abc 가 출력된다.
문자열을 오른쪽으로 정렬해주고 남는 공간을 뒤에 지정해준 인자로 채워넣는것이다.

왼쪽으로 정렬해주는건 ljust() 함수가 있고 zfill() 함수가 있다.

zfill()

val = "300".zill(5)
print(val)

이런식으로 사용하면 00300 으로 왼쪽에 0을 채워준다.

따라서 위에 rjust 말고 zfill(n) 이런식으로 문제를 풀어도 정답이다.

replace()

문자열을 변경할때 쓰는 함수

replace("찾을값","바꿀값",(바꿀횟수)) 이다

rjust랑 .. zfill를 다시 기억하자..쉬운문제인데 바로 못풀었다니...ㅠ

profile
한걸음씩 위로 자유롭게

0개의 댓글