BOJ/๐Ÿฅ‰

โ˜…Sorting Beginner I - 8 Solvedโ˜…

metamong 2022. 11. 14.

โ˜… 10989 ์ˆ˜ ์ •๋ ฌํ•˜๊ธฐ 3 โ˜…

 

import sys
input = sys.stdin.readline

N = int(input())
l = [0]*10000

for _ in range(N):
    n = int(input())
    l[n-1] += 1

cnt = 0
for x in l:
    cnt += 1
    if x != 0:
        for _ in range(x):
            print(cnt)

 

๐Ÿ‘ฏ‍โ™‚๏ธ ๋ฉ”๋ชจ๋ฆฌ 8MB, ์‹œ๊ฐ„ ์ œํ•œ 5์ดˆ๋กœ ๋ฉ”๋ชจ๋ฆฌ & ์‹œ๊ฐ„ ๋ชจ๋‘ ์‹ ๊ฒฝ์จ์•ผ ํ•œ๋‹ค

 

โ‘  ์ตœ๋Œ€ ์ฒœ๋งŒ ๊ฐœ์˜ ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„์•ผ ํ•˜๋ฏ€๋กœ ๋Œ€๋Ÿ‰์˜ ์ž…์ถœ๋ ฅ → ๋น ๋ฅธ ์ž…์ถœ๋ ฅ ํ•ด๊ฒฐ - sys.stdin.readline ์‚ฌ์šฉ

 

โ‘ก ์ž…๋ ฅ๋˜๋Š” ์ˆ˜์˜ ํฌ๊ธฐ๊ฐ€ 10,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค ์ด 10,000๊ฐœ์˜ ์›์†Œ๊ฐ€ ๋‹ด๊ธด ์ž์—ฐ์ˆ˜๋ณ„ count list๋ฅผ ์‚ฌ์šฉ → ์ˆ˜๊ฐ€ ์ž…๋ ฅ๋ ์ˆ˜๋ก count list element 1์”ฉ ์ฆ๊ฐ€

 

โ‘ข count list๋ฅผ traverseํ•˜๋ฉด์„œ 0์ด ์•„๋‹Œ element๊ฐ€ ์žˆ๋‹ค๋ฉด ์ญ‰ ์ถœ๋ ฅ

 

โ€ป ์ž…๋ ฅ๋˜๋Š” ๋ชจ๋“  ์ˆ˜์˜ ํฌ๊ธฐ๊ฐ€ 10,000 ์ดํ•˜์ธ ํŠน์ˆ˜์„ฑ์„ ๊ฐ์•ˆํ•ด count list๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค๋Š” ์ ์ด ํฌ์ธํŠธ! โ€ป

 

โ€ป ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ ๊ด€๋ จ map() โ€ป

## code 1
import time

start_time = time.time()
a = list(range(100000))
a2 = list()

for i in a:
    a2.append(i*2)

end_time = time.time() 
fin = end_time - start_time
print(fin)
#res 0.04319477081298828

#-------------------------------

## code 2
import time

start_time = time.time()
temp = [x*2 for x in range(100000)]
end_time = time.time()
fin = end_time - start_time
print(fin)
#res 0.01129007339477539

#-------------------------------

## code 3
import time

start_time = time.time()
a = list(range(100000))
a2 = map(lambda n: n*2, a)
end_time = time.time()

fin = end_time - start_time
print(fin)
#res 0.0034818649291992188

 

โ–ถ์ฃผ์–ด์ง„ list์˜ ๋ชจ๋“  ์›์†Œ๋ฅผ ์ œ๊ณฑํ•˜๋Š” ๋ฌธ์ œโ—€

โ‘  ๋˜ ๋‹ค๋ฅธ list๋ฅผ ๋งŒ๋“ค์–ด for๋ฌธ ๋Œ๋ฆผ

โ‰ซ list๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด ์žฌํ• ๋‹นํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ฐจ์›์—์„œ ๋น„ํšจ์œจ์ 

 

โ‘ก list comprehension ์‚ฌ์šฉ

โ‰ซ comprehension ๊ธฐ๋ฒ•์ด๋ฉด ์ข€ ๋” ๋น ๋ฅด๋‹ค

 

โ‘ข map() ์‚ฌ์šฉ

โ‰ซ map()์„ ์‚ฌ์šฉํ•˜๋ฉด ๋”ฐ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์žฌํ• ๋‹น ์—†์ด ๊ทธ ์ž๋ฆฌ์—์„œ ํ•œ๋ฒˆ์— ๋ชจ๋“  ์›์†Œ ๊ฐ๊ฐ ์ œ๊ณฑ์œผ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค. ์ถ”์ฒœ!

 

* ๋‚ด์šฉ ์ถœ์ฒ˜) https://wikidocs.net/21057


โ˜… 2750 ์ˆ˜ ์ •๋ ฌํ•˜๊ธฐ โ˜…

 

import sys
input=sys.stdin.readline

N = int(input())
l=[]
for _ in range(N):
    l.append(int(input()))
l.sort()
print(*l,sep='\n')

 

๐Ÿ‘ฏ‍โ™‚๏ธ ๋‹จ์ˆœ sort() ํ•จ์ˆ˜


โ˜… 25305 ์ปคํŠธ๋ผ์ธ โ˜…

 

import sys
input = sys.stdin.readline

N,k = map(int,input().split())

scores=list(map(int,input().split()))
scores.sort(reverse=True)

print(scores[k-1])

 

๐Ÿ‘ฏ‍โ™‚๏ธ ์ •๋ ฌ์„ ํ•œ ๋’ค ์ปคํŠธ๋ผ์ธ์˜ ์ ์ˆ˜๋ฅผ indexing์œผ๋กœ ์ถœ๋ ฅ๋งŒ ํ•˜๋ฉด ๋จ


โ˜… 23881 ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—… - ์„ ํƒ ์ •๋ ฌ 1 โ˜…

import sys
input = sys.stdin.readline

N,K=map(int,input().split())

arr = list(map(int,input().split()))
swapped = False

for i in range(N-1,0,-1):
    subarray_max = max(arr[:i])
    if subarray_max > arr[i]:
        subarray_max_index = arr.index(subarray_max)
        arr[i],arr[subarray_max_index] = arr[subarray_max_index],arr[i]
        K-=1
        if K== 0:
            swapped = True
            print(arr[subarray_max_index],arr[i])
            break

if not swapped: print(-1)

 

๐Ÿ‘ฏ‍โ™‚๏ธ ์„ ํƒ ์ •๋ ฌ์„ ์ง„ํ–‰ํ•˜๋Š” ๋ฌธ์ œ์œ ํ˜•! ์ด๋ก  ํฌ์ŠคํŒ…์—์„œ ๋‹ค๋ฃฌ ์˜ˆ์‹œ๋Š” ์•ž์—์„œ๋ถ€ํ„ฐ ๊ตฌํ•ด min_index๋ฅผ ๊ตฌํ•ด์„œ ์„œ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์œ„ ๋ฌธ์ œ๋Š” ๊ฑฐ๊พธ๋กœ ์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ max_index๋ฅผ ๊ตฌํ•ด์„œ ์„œ๋กœ ๋ฐ”๊พธ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ → max_index, ์ฆ‰ index์˜ ์ด๋™์œผ๋กœ ์ •์„๋Œ€๋กœ ์ผ์ผ์ด ํ™•์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ด์ค‘ for๋ฌธ์œผ๋กœ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•ด ์‰ฌ์šด ๋‚ด์žฅํ•จ์ˆ˜ max()๋กœ subarray์˜ max๊ฐ’์„ ๋ฐ”๋กœ ๊ตฌํ•˜๊ณ , ๋งŒ์•ฝ ํ˜„์žฌ i์˜ ์œ„์น˜ element๋ณด๋‹ค ํฐ ์ง€ ํ™•์ธ ๋’ค, max๊ฐ’์˜ index๋ฅผ ๊ตฌํ•˜๊ณ  ๋ฐ”๋กœ swap


โ˜… 23882  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—… - ์„ ํƒ ์ •๋ ฌ 2 โ˜…

import sys
input = sys.stdin.readline

N,K=map(int,input().split())

arr = list(map(int,input().split()))
swapped = False

for i in range(N-1,0,-1):
    subarray_max = max(arr[:i])
    if subarray_max > arr[i]:
        subarray_max_index = arr.index(subarray_max)
        arr[i],arr[subarray_max_index] = arr[subarray_max_index],arr[i]
        K-=1
        if K== 0:
            swapped = True
            print(*arr)
            break

if not swapped: print(-1)

 

๐Ÿ‘ฏ‍โ™‚๏ธ swap ํ–ˆ์„ ๋•Œ์˜ ๋‘ swap๋˜๋Š” ์›์†Œ ์ถœ๋ ฅ์ด ์•„๋‹Œ, swap ์งํ›„์˜ array ์ถœ๋ ฅ!


โ˜… 23899  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—… - ์„ ํƒ ์ •๋ ฌ 5 โ˜…

import sys
input=sys.stdin.readline
N=int(input())
A=list(map(int,input().split()))
B=list(map(int,input().split()))
flag=False
if A==B: flag = True
else:
    for i in range(N-1,0,-1):
        cur_max = max(A[:i+1])
        if A[i] != cur_max:
            cur_max_index = A.index(cur_max)
            A[i],A[cur_max_index] = A[cur_max_index],A[i]

            if A==B:
                flag = True
                break

print(1 if flag else 0)

 

๐Ÿ‘ฏ‍โ™‚๏ธ ์œ„ ๋ฌธ์ œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋˜‘๊ฐ™๊ณ , ๋„์ค‘์˜ ๋ฐฐ์—ด์ด B ๋ฐฐ์—ด๊ณผ ๊ฐ™์€ ์ง€์˜ ์—ฌ๋ถ€ ์ถœ๋ ฅ. ๋‚˜ ์ž์‹ ์„ ํฌํ•จํ•œ subarray์—์„œ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๊ณ , ๋‚˜ ์ž์‹ ๊ณผ ์ตœ๋Œ“๊ฐ’์ด ๋‹ค๋ฅด๋‹ค๋ฉด swap ์ง„ํ–‰. swap ์ง„ํ–‰์˜ ๊ธฐ์ค€์ด ์•ฝ๊ฐ„ ๋‹ค๋ฅด๋‹ค๋Š” ์ ๋งŒ ๊ณ ๋ คํ•˜๋ฉด OK


โ˜… 24051 ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—… - ์‚ฝ์ž… ์ •๋ ฌ 1 โ˜…

 

import sys
input=sys.stdin.readline
N,K=map(int,input().split())
A=list(map(int,input().split()))
ans = False

for i in range(1,N):
    loc = i-1
    newItem = A[i]

    while(0<=loc and newItem < A[loc]):
        A[loc+1] = A[loc]
        K-=1
        if K==0:
            print(A[loc+1])
            ans=True
            break
        loc-=1

    if ans: break

    if (loc+1 != i):
        A[loc+1] = newItem
        K-=1
        if K==0:
            ans=True
            print(newItem)
            break
    
if not ans: print(-1)

 

๐Ÿ‘ฏ‍โ™‚๏ธ insertion sort ํฌ์ŠคํŒ…์—์„œ ์†Œ๊ฐœํ•œ algo 2 ์œ ํ˜•. swap ์—†์ด subarray ์ผ๋ถ€๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ฐ€๊ณ  ํ•œ ๋ฒˆ์— newItem์„ ๋ฐ€๊ณ  ๋‚œ ๋นˆ ์ž๋ฆฌ์— ํ• ๋‹นํ•˜๋Š” ๋ฐฉ์‹ / ์ €์žฅ์€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ 1๋ฒˆ์”ฉ ๋ฐ€ ๋•Œ / newItem์„ ๋นˆ ์ž๋ฆฌ์— ๋„ฃ์„ ๋•Œ ์ด๋ ‡๊ฒŒ ๋‘ ์ข…๋ฅ˜์˜ ์ €์žฅ์ด ์ง„ํ–‰๋˜๊ณ , K=0์ด๋ฉด ๋ฐ”๋กœ ์ถœ๋ ฅํ•˜๊ณ  break / ans Flag ๋ณ€์ˆ˜ ๋งŒ๋“ค์–ด์„œ ans ๊ฐ’์ด True์ด๋ฉด -1 ์ถœ๋ ฅ


โ˜… 24052 ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—… - ์‚ฝ์ž… ์ •๋ ฌ 2 โ˜…

 

import sys
input=sys.stdin.readline
N,K=map(int,input().split())
A=list(map(int,input().split()))
ans = False

for i in range(1,N):
    loc = i-1
    newItem = A[i]

    while(0<=loc and newItem < A[loc]):
        A[loc+1] = A[loc]
        K-=1
        if K==0:
            print(*A)
            ans=True
            break
        loc-=1

    if ans: break

    if (loc+1 != i):
        A[loc+1] = newItem
        K-=1
        if K==0:
            ans=True
            print(*A)
            break
    
if not ans: print(-1)

 

๐Ÿ‘ฏ‍โ™‚๏ธ ๋ณ€๊ฒฝ ์งํ›„์˜ array ๋‚ด์šฉ ์ถœ๋ ฅ! ์œ„ 24051๊ณผ ์™„์ „ ๋™์ผ


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

๋Œ“๊ธ€