1) 문제

클릭▼


2) 문제 설명 (이진법 계산)

 

 

# 이진법(二進法, binary)은 두 개의 숫자(0과 1)만을 이용하는 수 체계이다. 컴퓨터는 수를 표현할 때 두 가지

   수로 표현하는데 그것이 바로 0과 1이며, 이렇게 0과 1만으로 수를 표현하는 것을 ‘이진수’라고 한다. 

# ↑위에 그림을 보면 공백을 0, '#'을 1로 나타내서 지도 옆에 2진수로(01001, 10100.. ) 나타내고 그 숫자를

    10진수로 변환 한 값을 나타내고 있다.

# 우리가 일상생활에서 읽는 수를 10진수인데 위에 문제에서 2진수 값을 10진수를 변환 한 것이다. 즉, 2진수 

는 10진수로 변환하면 9이다.

 

2진수 -> 10진수 변환방법은?

# 2진수는 오른쪽에서 왼쪽으로 나타낸다.

 

 

# 예를 들어 01001 이라면 1이 있는 자리의 숫자만 더해서 계산하면 8+1 = 9가 된다.

 

 

# 동일한 방법으로 10100 은 16+4 = 20이 되고 11100은 16+8+4 = 28이 된다

 

 


3) 코드

('좋아요' 수 제일 많은 풀이)

 

 


4) 코드 설명

① answer = [ ]

# 결과를 넣어서 출력할 빈 리스트 answer를 만들어 준다.

② for i, j in zip(arr1, arr2):

# zip() 함수는 동일한 개수(arr1와 arr2의 길이가 같다.)로 이루어진 자료형을 묶어 주는 역할을 한다.

  여러 개의 iterable 객체를 받은 후 자료형 들을 묶어서 튜플 형태로 출력해준다. 

# iterable 이란 반복 가능하다는 뜻인데 한번에 하나씩 자료를 반환할 수 있는 파이썬 객체이다. 

  간단히 말해 for문으로 그 값을 출력 할 수 있는 것을 의미하며 리스트, 튜플, 딕셔너리 등을 말한다.

 

 

 

 

# ↑위의 결과를 보면 리스트 arr1과 리스트 arr2를 zip 함수로 묶어서 리스트 arr1의 요소를 i로,

   리스트 arr2의 요소를 j로 해서 print(i, j)를 하면 각 list의 동일한 index 끼리 짝지어서 출력된다.

 

③ a12 = str(bin(i|j)[2:])

 

# bin() 함수는 10진수 숫자를 2진수(binary)로 변환해주는 함수이다.

# 예를들어 10진수 숫자 28을 bin() 함수에 넣어서 출력을 하면 '0b11100'이 된다.

# 여기서 '0b'는 2진수를 뜻한다. ( '0o' = 8진수, '0x' = 16진수 )

# 우리는 '0b'를 뺀 11100만 사용하니 [2:] 즉, 인덱스 2번째 부터 사용한다. (인덱스는 0부터 시작)

 

 

 

 

# bin(i|j) 여기서 의 의미는 논리 연산자(logical operator) OR을 의미한다.

# OR두 비트 a, b 중 하나라도 1 이면 결과는 1이고 a, b 둘다 0 일때만 0이다.

# 그림을 보면 더 쉽게 이해가 된다.

 

 

 

 

# 그럼 bin(i|j) 의 연산은 우선 i, j를 2진수로 변환한 후 i, j를 OR 연산 시킨다. 

 

 

 

 

# 연산 방법을 보면 arr1의 첫번째 요소인 46을 bin()을 사용하여 2진수로 변환하면 101110 = bin(i)이 된다.

# arr2의 첫번빼 요소인 27을 bin()을 사용하여 2진수로 변환하면 11011 = bin(j) 이 된다.

# 그 다음 OR 연산으로 이 두 이진수를 오른쪽 정렬하여 bin(i), bin(j)중 하나라도 1이 있으면 1을 반환한다.

# 숫자가 없다면(빈칸) 두 비트 중 하나라도 1이 있으면 1을 반환하고 아니면 0을 반환한다.

 

 

④ a12 = a12.rjust(n,'0')

 

# rjust() 는 숫자를 오른쪽으로 정렬 시키는 함수이다.

# rjust(전체 자리 숫자, 공백이 있을 경우 공백을 채울 텍스트) 로 정의한다.

# rjust(n,'0')는 n 길이만큼 공백에 '0' 을 채워 넣으라는 뜻이다.

# OR 연산 후 a12를 출력해보자.

 

 

 

# 위의 출력 결과를 보면 길이가 맞지 않은것을 볼 수 있다.

   (1, 2, 3, 6번째는 길이가 6인데, 4, 5번째 결과는 길이가 5)

 

 

 

# 위의 결과에서 보듯 n이 6이므로 길이를 모두 6으로 맞추고 공백은 '0'으로 채우고 오른쪽 정렬을 했다.

 

⑤  a12=a12.replace('1','#')
     a12=a12.replace('0',' ')

# replace() 는 특정값을 다른값으로 바꿔주는 함수이다.

# replace("찾을문자열", "바꿀문자열")로 정의한다.

# replace('1',#') 문자열에서 1을 찾아 '#'으로 바꾸고, replace('0',' ') 문자열에서 0을 찾아 공백으로 바꾼다.

 

⑥ answer.append(a12)

# a12의 결과 값을 append() 메소드를 사용하여 리스트 answer에 추가한다.

# 그다음 return answer 하여 정답을 출력한다.

+ Recent posts