[코드트리 챌린지] 일반 정렬

HKTUOHA·2023년 10월 3일
0

코드트리

목록 보기
6/15
post-thumbnail

⭐실력진단 결과



배열을 정렬하는 방법에 대해 배우게 됩니다.



기본개념


🟢오름 내림차순 정렬

✏️숫자 정렬

  1. sort() 내장 함수 : 오름차순 정렬
리스트.sort()              # 오름차순
리스트.sort(reverse=True)  # 내림차순
리스트 = 리스트[::-1]       # 오름차순 정렬 후 내림차순으로 뒤집기 (슬라이싱)
  1. sorted() 내장 함수 : 정렬된 리스트 반환하는 함수
                              정렬 이후의 리스트를 변수에 할당해줘야 함
                              원래 리스트는 변하지 않음
arr = [0, 5, 6, 2, 1, 3]
arr1 = sorted(arr)
print(arr)          # [0, 5, 6, 2, 1, 3]
print(arr1)         # [0, 1, 2, 3, 5, 6]
  1. sort() + revsered() ⇒ reversed 사용 시 다시 list로 감싸줘야 함
리스트.sort()
리스트 = list(reversed(리스트))  # reversed array

📌문제


📌나의 코드

  1. sorted() 사용
n = int(input())
nums = list(map(int, input().split()))
print(*sorted(nums))
print(*sorted(nums)[::-1])
  1. sort() 사용
n = int(input())
nums = list(map(int, input().split()))
nums.sort()
print(*nums)
nums.sort(reverse=True)  # nums = nums[::-1]
print(*nums)


🟢문자열 정렬

✏️문자열 내 문자 정렬

  1. sort() 내장 함수 : 문자열을 list로 변환 후 정렬 가능
                           정렬 후 join 함수로 list를 다시 문자열로 변환
s = "babo"

# 문자열을 리스트로 변환
arr = list(s)
arr.sort()
print(arr)                 # ['a', 'b', 'b', 'o']

# 리스트를 문자열로 변환
sorted_str = ''.join(arr)
print(sorted_str)          # abbo
  1. sorted() 내장 함수 : 문자열을 넣어도 정렬 가능
                              결과물은 리스트이므로 join함수로 문자열 변환
s = "babo"
sorted_arr = sorted(s)
print(sorted_arr)          # ['a', 'b', 'b', 'o']
sorted_str = ''.join(sorted_arr)
print(sorted_str)

📌문제


📌나의 코드

  1. sorted() 사용
print(''.join(sorted(input())))
  1. sort() 사용
arr = list(input())
arr.sort()
print(''.join(arr))



연습문제


🟢단어 정렬

📌문제


📌나의 코드

n = int(input())
ls = [input() for _ in range(n)]
ls.sort()

for i in ls:
    print(i, end='\n')


🟢Top K 숫자 구하기

📌문제


📌나의 코드

n, k = map(int, input().split())
ls = list(map(int, input().split()))
ls.sort()

print(ls[k - 1])


🟠두 개의 동일한 수열

📌문제


📌나의 코드

n = int(input())
A = list(map(int, input().split()))
B = list(map(int, input().split()))

A.sort()
B.sort()

if A == B:
    print("Yes")
else:
    print("No")

✏️개선점

원소가 하나라도 다르면 False, 전부 일치하면 True를 반환하는 함수를 작성하여 사용하면 수행 시간을 단축할 수 있다.



🟠두 개의 동일한 수열

📌문제


📌나의 코드

n = int(input())
ls = list(map(int, input().split()))
ls.sort()

MAX = 0
for i in range(n):
    MAX = max(MAX, ls[i] + ls[-1-i])

print(MAX)

✏️개선점

i번째 원소와 (2n - 1 - i)번째 원소를 매칭하는 것으로 바꿀 수 있다.



🟠순서를 바꾸었을 때 같은 단어인지 판별하기

📌문제


📌나의 코드

A = list(input())
B = list(input())
 
A.sort()
B.sort()

A = ''.join(A)
B = ''.join(B)

if A == B:
    print("Yes")
else:
    print("No")

✏️개선점

sorted()로 한줄 코딩을 할 수 있다.

A = input()
B = input()

print("Yes" if sorted(A) == sorted(B) else "No")


🔴k번째로 신기한 문자열

📌문제


📌나의 코드

n, k, T = input().split()
n = int(n)
k = int(k)

ls = []
for _ in range(n):
    s = input()
    if s[:len(T)] == T:
        ls.append(s)

ls.sort()

print(ls[k - 1])

✏️개선점

T로 시작하는지 확인할 때 T가 입력보다 긴 경우, 다음으로 바로 넘어갈 수 있도록 함수를 작성하면 수행 시간을 단축할 수 있다.

# a가 b로 시작하는지 확인
def starts_with(a, b):
    # b의 길이가 더 길 수 없다.
    if len(a) < len(b):
        return False

    # b의 길이까지 봤을 때 a와 문자열이 동일한지 확인
    return a[:len(b)] == b



테스트


🟠중앙값 계산 2

📌문제


📌나의 코드

n = int(input())
nums = list(map(int, input().split()))

ls = []
for i in range(n):
    ls.append(nums[i])
    ls.sort()
    if i % 2 == 0:
        print(ls[i//2], end=' ')

✏️개선점

sorted()와 슬라이싱을 통해 리스트를 새로 만들 필요 없이 정렬을 진행할 수 있다.

sorted_nums = sorted(nums[:i + 1])
profile
공부 기록

0개의 댓글