코딩 테스트 스터디/프로그래머스

[level 1] 비밀지도

남쪽마을밤송이 2022. 7. 26. 21:39

 문제 

https://school.programmers.co.kr/learn/courses/30/lessons/17681

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 사용 언어 

Python3

 풀이 과정 

삼성 SW 아카데미에서 (거의 유일하게 학습한) 비트 연산 문제였다!

 or 연산을 하면 되겠다는건 알았는데 파이썬에서 2진수 다루는 방법을 잘 몰라 검색해서 해결했다.

 

그리고 아래 첫 번째 제출 코드에서 겹치는 부분이 마음에 들지 않아 한 번만 쓰도록 if문을 변경했다.

def solution(n, arr1, arr2):
    answer = []
    for i in range(n):
        wall = bin(arr1[i] | arr2[i])[2:]
        # print(wall)
        if len(wall) == n:
            wall = wall.replace("0", " ")
            wall = wall.replace("1", "#")
            answer.append(wall)
        else:
            wall = "0" * (n - len(wall)) + wall
            wall = wall.replace("0", " ")
            wall = wall.replace("1", "#")
            answer.append(wall)
    return answer

통과! 간단해서 시간이 모두 0.01ms로 똑같았다.

 

 제출 답안 

def solution(n, arr1, arr2):
    answer = []
    for i in range(n):
        wall = bin(arr1[i] | arr2[i])[2:]
        # print(wall)
        if len(wall) != n:
            wall = "0" * (n - len(wall)) + wall
        wall = wall.replace("0", " ")
        wall = wall.replace("1", "#")
        answer.append(wall)
    return answer

 

 공부한 내용 

bin

파이썬은 내장 함수로 2진수 변환 함수 bin을 사용할 수 있다.

wall = bin(arr1[i] | arr2[i])[2:]

나는 처음에 둘 다 변환해서 or 연산을 수행하려고 했는데, 비트 연산은 어차피 2진수로 계산되기 때문에 변환한 값에만 bin을 사용했다.

그리고 bin 함수의 반환값에는 0b가 붙기 때문에 숫자만 사용하기 위해 슬라이싱을 해주었다.

 

이외에도 8진수 변환 함수 oct()와 16진수 변환 함수 hex()가 있고 각각 0o와 0x가 붙는다.

a = "song"
b = "hee"
print(f"{a}{b}") # songhee

 

출처: https://www.daleseo.com/python-int-bases/

'코딩 테스트 스터디 > 프로그래머스' 카테고리의 다른 글

[level 2] 양궁대회  (0) 2022.08.10
[level 2] 주차 요금 계산  (0) 2022.08.01
[level 3] N으로 표현  (0) 2022.07.24
[level 3] 네트워크  (0) 2022.07.23
[level 2] 게임 맵 최단거리  (0) 2022.07.22