본문 바로가기
Python

groomlevel/ 이진수 정렬/ python + 설명

by YUNZEE 2024. 7. 8.
728x90

문제 풀이

1. = 정수의 개수(두 번째 줄) / K = K번째에 위치한 정수(6번째)

 N = 8 / K = 6

 

2. 1 2 3 4 5 6 7 8 => 두 번째 줄에 있는 리스트를 이진수로 만들자 

 

3. 이진수 2^3 = 8 / 2^2 = 4 / 2^1 = 2 / 2^0 =1

1 = 0001

2 = 0010

3 = 0011

4 = 0100

5 = 0101

6 = 0110

7 = 0111

8 = 1000

 

4. 1의 숫자가 적은 순서로 정렬 내림차순/ 1의 개수가 같다면 10진수를 기준으로 내림차순

1 = 0001 (맨 뒤 정렬: 7번째)

2 = 0010

4 = 0100 -> 5번째 위치한 수 '4' 출력(K-1)

8 = 1000

3 = 0011

5 = 0101

6 = 0110

7 = 0111 (맨 앞 정렬: 0번째) 

코드 함수 설명

 

split( ) : 문자열을 잘라서 리스트로 만들어줌

text = "Hello world this is Python"
words = text.split()
print(words)  # 출력: ['Hello', 'world', 'this', 'is', 'Python']

 

map( ): 리스트나 다른 반복 가능한 객체의 각 요소들에 새로운 리스트를 만들어줌

numbers = [1, 2, 3, 4]
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers)  # 출력: [1, 4, 9, 16]

 

format( ): 문자열에 변수를 삽입하거나 형식을 지정하는 데 사용

name = "John"
age = 14
introduction = "My name is {} and I am {} years old.".format(name, age)
print(introduction)  # 출력: My name is John and I am 14 years old.

 

sort( ): 오름차순(작은 것부터 큰 것) 

reverse( ): 내림차순(큰 것부터 작은 )

key = : 정렬 기준을 지정하는 데 사용된다.

#sort
words = ["apple", "banana", "cherry", "date"]
words.sort(key=len)
print(words)  # 출력: ['date', 'apple', 'banana', 'cherry']
#reverse
words = ["apple", "banana", "cherry", "date"]
words.sort(reverse = True, key=len)
print(words) #출력: ['banana', 'cherry', 'apple', 'date']

 

lambda: 간단한 익명 함수를 만들 때 사용된다.

square = lambda x: x ** 2
print(square(5))  # 출력: 25

 

결과
n,k = map(int, input().split())
alist = list(map(int, input().split()))

def binary(a):
	return str(format(a, 'b')).count("1")

alist.sort(reverse = True, key = lambda x: (binary(x), x))

print(alist[k-1])
728x90