Photo by Pietro Mattia on Unsplash
def solution(n, arr1, arr2):
answers = []
for i in range(n):
answer = bin(arr1[i] | arr2[i])[2:]
answer = answer.rjust(n,'0')
answers.append(answer.replace('1','#').replace('0', ' '))
return answers
위에 적힌 룰대로 하나하나 따라가면서 풀다보니 한줄짜리 예쁜 코드가 나왔다며 기뻐했다.
def solution(n, arr1, arr2):
return [bin(arr1[i] | arr2[i])[2:].replace('1','#').replace('0', ' ') for i in range(n)]
그러나 4,5번 케이스의 실패를 만나게 되었고 이유는 2진수의 0부분이 채워지지 않아서 길이가 맞지 않게 된 것이었다.
처음에 2진수에 대한 이해가 부족하여 앞 뒤로 여기저기 0을 넣다가 또 이해가 안 된 코드를 치려고하는 못난 나를 발견하고 키보드에서 손을 떼고 생각을 해봤다.
예를 들어 0 과 1의 or 라고 하면 1이 나올텐데 문제에서 요구하는 자리수가 6자리라고 했을 때 1의 위치는 당연하게도 오른쪽 제일 끝이다 아니라면 다른 수가 되어버리기 때문이다.
그래서 결국 파이썬 내장함수인 rjust에 패딩을 더한 후 문자열의 길이값 n과 채울 값 '0'을 넣어주어 코드를 완성하게 되었다.
def solution(N, stages):
stages_len = len(stages)
answers = []
for i in range(1, N+1):
stage_cnt = stages.count(i)
if stages_len == 0:
answers.append((i, 0))
continue
answers.append((i, stage_cnt / stages_len))
stages_len -= stage_cnt
return [answer[0] for answer in sorted(answers, key=lambda x: x[1], reverse=True)]
유니크한 값만 사용함으로 인해서 다른 값들을 0으로 들지 못한다.
-> for 문을 통해서 1부터 n+1까지의 값을 순회함 : 실패
난이도 조절에 실패하여 낮은 난이도에서 사람들이 많이 오르지 못한 경우 예를들어 도달해야하는 스테이지가 5라고 했을 때 stages = [3,2,3,1,2,3] 가 이런식으로 주어진다면 4스테이지부터는 zerodivision 에러가 남
-> stage_len == 0 조건을 추가하여 0으로 나누는일없이 바로 0으로 더해지도록 만듦