[1차] 비밀지도

Polla·2023년 1월 14일
0

programmers

목록 보기
24/58
post-thumbnail

프로그래머스 lv0 n의 배수 고르기 파이썬



💡 문제


휴... 길다 길어! 그치만 나름 간단...



🥳 해결!

필요한것.

1. 어떻게 2진수로 변환시킬 것인가?
2. 두개 중 1이 하나라도 있으면~ 을 어떻게 짤것인가?
3. 2진수로 변환할 경우 n의 길이보다 짧으면 어떻게 할것인가?
4. # 과 ' '을 어떻게 붙일것인가?

우선 필요한걸 정리해봤었다. 생각나는건 총 4가지.... 나는

def solution(n, arr1, arr2):
    map1 = []
    map2 = []
    ans = []
    
    for i in range(n):
        total = ''
        j = 0
        map1.append(bin(arr1[i])[2:])
        map2.append(bin(arr2[i])[2:])
        
        if len(map1[i]) < n:
            map1[i] = '0'*(n-len(map1[i])) + map1[i]
        
        if len(map2[i]) < n:
            map2[i] = '0'*(n-len(map2[i])) + map2[i]
            
        for j in range(n):
            if map1[i][j] == '0' and map2[i][j] == '0':
                total =  total + ' ' 
            else:
                total = total + '#'
        ans.append("".join(total[:]))
        
    return ans

이렇게 짰다.

2진수로 변환은 bin()이라는 함수를 썼다.
이렇게 하면

273은 무시하자. 눈물이 날것 같으니까....연습용으로 쓰는 NOTE 이름의 파일.....살앙해

0b가 무조건 같이 붙기에 [2:]와 같이 slicing 해줘야 2진수가 남는다.

그 후, if문을 통해서 len() 즉, 길이가 n보다 작을시에, 부족한 만큼 0을 붙여줬다.

그리고 for문을 통해서 하나씩 비교했을때 모두 0이라면 ' '를,
else'#' 즉 벽을 만들어주고,

" ".join()을 통해서 묶어주고 list에 넣어줬다.

사실... 그렇게 못만든 코드라고 생각하진 않았는데😕, 역시 경험이 부족해서인지... 내가 작성한 for문 3개를 하나로 줄이는 함수가 있더라는 이야기.... 함수만 알고있었어도....좀 아쉽다...사실 늘 아쉬움....
이걸 좀 정리해둬야겠다... 곧...


📌 함수 사용

	비트 연산자.

	- or(|) : 둘중에 하나만 1이어도 1을 return
	- and(&) : 둘 모두 1이여야 1을 return
    - nor(^) : 둘 다 0 일시 1, 둘다 1 일시 0을 return
    - not(~) : 반대로 return

	rjust: 첫번째로 입력한 값이 빈만큼 빈칸을 생성 후,
		   오른쪽으로 정렬 한 뒤 공백 매워줄 문자 입력
			ex)  a = maps.rjust(n, "0")
    ljust: 첫번째로 입력한 값이 빈만큼 빈칸을 생성 후,
		   왼쪽으로 정렬 한 뒤 공백 매워줄 문자 입력
			ex)  a = maps.rjust(n, "0")

	zip:  iterable 자료형의 각각의 요소를 나눈 후 순서대로 묶어서
		  요소 개수만큼 새로운 iterable 자료형을 생성한다

위 함수들 중 우선 내 코드에 or만 사용해도

def solution(n, arr1, arr2):
    maps = []
    
    for i in range(n):
        maps.append(bin(arr1[i]|arr2[i])[2:])
        
        if len(maps[i]) < n:
            maps[i] = '0' * (n - len(maps[i])) + maps[i]
          
        maps[i] = maps[i].replace('1', '#')
        maps[i] = maps[i].replace('0', ' ')

    return maps

이렇게나 간단해지고, rjust를 사용시,

def solution(n, arr1, arr2):
    answer = []
    for i in range(n):
        maps = str(bin(arr1[i]|arr2[i])[2:])
        maps = maps.rjust(n, '0')
        maps = maps.replace('1', '#')
        maps = maps.replace('0', ' ')
        answer.append(maps)
        
    return answer

이렇게나 간단해진다.... 파이썬 함수 짱...

다들 이렇게 적절한 함수를 어떻게 찾는지 궁금하다.... 다들 경험해봐서 함수를 잘 아는걸까..? 아주 조금 우울....눈가가 촉촉... 나만...감자일까..?
😭😭😭


profile
트러블 슈팅 Blog => https://polla.palms.blog/home

0개의 댓글