2023. 4. 25. 22:17ㆍTIL/2023.4월
2023.04.25 화
컨디션이 좋지않더니 몸살감기가 왔습니다, 허리가 왜 이렇게 아프지 했더니 좀 있으니 열이납니다, 빠르게 알고리즘 문제하나 풀고 오늘을 마무리해 봅시다.
문제
bin1, bin2에는 각각 이진수가 들어있습니다, result값으로 bin1과 bin2의 합을 이진수의 형태로 받기 위해서 어떻게 해야할까요?
bin1 = 10 bin2 = 11 result = 101
십진수로 변경하면 bin1 = 2 bin2 = 3 result= 5 입니다.
시도
1. 이진수 그대로 덧셈시켜봅시다.
->이진수라는 것을 인식하지 못함 정수의 합이 출력됩니다. result = 21
2. 이진수를 십진수로 변경하는 메서드를 찾았습니다, 또한 십진수를 이진수로 변경하는 메서드를 찾았습니다.
사용해 줍니다.
def solution(bin1, bin2):
answer = 0
ten_bin1 = int(bin1, 2)
ten_bin2 = int(bin2, 2)
answer = bin(ten_bin1 + ten_bin2)
return answer
에러가 발생했습니다.
TypeError: int() can't convert non-string with explicit base
int메서드를 사용하기 위해서는 변수의 형태가 str 즉 문자형이여야 합니다.
bin1 = 10(x) => bin1 = "10" (O)
2-1. 문자형태로 변경 후 출력했습니다.
->나와야 하는 결과가 아닙니다.
출력결과: 0b101, result = 101로 출력되어야 합니다. 불필요한 0b를 제거해줍니다.
def solution(bin1, bin2):
answer = 0
ten_bin1 = int(bin1, 2)
ten_bin2 = int(bin2, 2)
answer = bin(ten_bin1 + ten_bin2)[2:]
return answer
+)
어떻게 int메서드는 들어오는 값이 이진수라는 것을 알았을까요?
ten_bin1 = int(bin1, 2)
ten_bin2 = int(bin2, 2)
뒤에 2가 수상합니다.
ten_bin1 = int(bin1, 8)
ten_bin2 = int(bin2, 8)
이렇게 변경하여 사용해봅시다.
8진수 10,11은 십진수에서 각각 8,9 입니다, 17의 8진수는 21입니다, 따라서 예상되는 결과의 값은 21입니다.
결과는 10001 이진수 값이 출력됩니다.
그렇다면 bin1, bin2가 8진수로 잘 인식되었고, 그 합이 10진수로 잘 변경되었는지 확인해봅시다.
def solution(bin1, bin2):
answer = 0
ten_bin1 = int(bin1, 8)
ten_bin2 = int(bin2, 8)
answer = ten_bin1 + ten_bin2
# answer = bin(ten_bin1 + ten_bin2)[2:]
return answer
결과값은 17이 나옵니다.
그렇다면 십진수 17을 8진수로 변경할 때 문제가 발생한 것으로 보입니다.
여기서 나온 결과값이 10001이고 십진수 17을 이진수로 변경하면 그 값이 10001이라는 것을 알 수 있습니다.
따라서, bin은 십진수를 이진수로 만들어주는 메서드라는 것을 알 수 있습니다.십진수를 8진수로 바꿔주는 메서드를 찾아보았습니다, oct라는 메서드를 사용하면 된다고 합니다.
def solution(bin1, bin2):
answer = 0
ten_bin1 = int(bin1, 8)
ten_bin2 = int(bin2, 8)
answer = ten_bin1 + ten_bin2
answer = oct(ten_bin1 + ten_bin2)[2:]
return answer
결과가 21로 출력됩니다.
느낀점
TIL이 이상한데 생각이 드실 겁니다, 시도부분에서 bin을 십진수를 이진수로 바꾸는 메서드로 알고 사용한 것이 아닌가? 의문이 드실 겁니다, 문제를 만났을 때 정확히 메서드가 어떤 기능을 하고, 어떻게 사용되며, 어떤 식으로 동작하는지 모르고 사용해서 그렇습니다.
def solution(bin1, bin2):
answer = 0
ten_bin1 = int(bin1, 2)
ten_bin2 = int(bin2, 2)
answer = ten_bin1 + ten_bin2
answer = bin(ten_bin1 + ten_bin2)[2:]
return answer
int 뒤의 2라는 요소가 이진수를 표현한다는 것, bin이 십진수를 이진수로 변경해주는 기능을 하고 [2:]는 split를 사용했다라는 것을 이해하지 못했습니다.
split의 기능도 사용방법도 인지하고 있었습니다, 하지만 문제를 만나고 메서드를 검색했을 때, bin [2:] 여기서 [2:]를 이진수로 바꾸기 위해 적어준다 라고 생각했습니다.
왜 이런 문제가 발생했을까요?
많은 메서드가 있고 필요할 때 찾아보면 된다 생각하고, 메서드의 기능을 좀 더 집중하여 살펴보지 않았기 때문이라 생각합니다.
구글링하여 답을 찾은 블로그에 제가 오늘 적은 TIL 시도 부분처럼 왜 사용하는지 친절히 예제 문제까지 하여 다 나와있었습니다, 저는 그것은 다 보지않고 이렇게 코드를 사용하면 문제를 풀 수 있구나만 생각하였기에 왜 int를 사용하고 bin을 사용하며 split [2:]를 사용해야 하는지 몰랐던 것입니다.
sort, sorted 알고리즘 문제를 풀면서 많이 사용했습니다, 막연히 정렬을 위해 사용하지 정도만 알고있다, 오늘 페어프로그램을 하면서 sort는 기존 리스트를 재정의하고, sorted는 새로운 리스트를 만들고 그 곳에 정렬을 시도한다는 것을 알았습니다, 또한 정렬을 위해 sort, sorted를 사용하는 것은 알아도 코드로 표현하는 부분에서 형태가 올바르지 않다는 에러를 항상 마주합니다, 또한 += 과 append 의 차이와 사용 방법 등도 이와 같다 볼 수 있습니다.
알고리즘 문제를 풀면서 사용하는 메서드의 기능과 작동원리에 대하여 조금 더 생각해보아야겠다 오늘 생각했습니다.
'TIL > 2023.4월' 카테고리의 다른 글
TIL django image field (1) | 2023.04.27 |
---|---|
TIL 알고리즘[로그인 확인] (0) | 2023.04.26 |
TIL onclick () (0) | 2023.04.24 |
TIL CORS (0) | 2023.04.21 |
TIL CBV(클래스형 뷰), swagger (0) | 2023.04.20 |