https://www.acmicpc.net/problem/2562
https://www.acmicpc.net/problem/2562


풀이

리스트와 내장함수를 이용하여 풀이 가능하며, 리스트 사용 없이 입력받는 즉시 비교하여 최대값과 위치(몇 번재 수인지)를 업데이틑 하는 방법이 가능하다.

 

>>> 리스트 사용 없이 입력받는 즉시 비교하여 최대값과 위치(몇 번재 수인지)를 업데이틑 하는 방법

max = 0
max = 0

for i in range(9):
    num = int(input())
    
    if num > max:
        max = num
        max_i = i
    
print(max)
print(max_i+1)

 

>>> 리스트와 내장함수를 사용하는 방법

arr = []

for i in range(9):
    arr.append(int(input()))
    
print(max(arr))
print(arr.index(max(arr))+1)

 

>>> 결과

가장 처음에 제출하여 36ms 걸린 풀이는 리스트 사용 없이 입력받는 즉시 비교하여 최대값과 위치(몇 번재 수인지)를 업데이틑 하는 방법이다.

 

두 번째 제출은 중간에 오타가 있어서 틀렸다;;;

 

마지막에 제출하여 32ms 걸린 풀이는 리스트와 내장함수를 사용하는 방법이다.

 

결론

이번에는 리스트를 사용하지 않는 방식이 조금이나마 빠를 것으로 예상하였지만, 리스트와 내장 함수를 사용하는 방법이 조금이나마 빠른 결과를 낳았다.

 

이는 매 입력시 값을 비교하는 과정이 시간 소요가 된다는 점을 시사한다.

 

최대한 빠르게 입력받아 내장 함수를 사용하여 최대값을 찾는 방법이 빠르다는 것을 배웠다.

https://www.acmicpc.net/problem/10818


풀이

이번 문제는 python 내장 함수인 min(), max()를 사용하여 풀면 간단하나, 내장함수를 사용하고 for loop 을 사용하여 푸는 방법에 대해서도 같이 고민해 보았다. 

 

두 방법을 제출하여 사용 메모리와 처리시간에 차이가 있는지도 확인해 보고 싶었다.

 

>>> 내장 함수를 사용하여 풀이한 방법:

N = int(input())
arr = list(map(int, input().split()))

print(min(arr),max(arr))

 

>>> for loop을 이용하여 전체를 다 비교하는 방법

N = int(input())
arr = list(map(int, input().split()))

min = arr[0]
max = arr[0]

for i in range(1, N):
    if arr[i] > max:
        max = arr[i]
    elif arr[i] < min:
        min = arr[i]
        
print(min, max)

 

 

>>> 백준 사이트 내 결과

제일 아래쪽(시간: 364ms)이 내장함수를 사용하여 제출한 풀이이며, 제일 위는 for loop을 이용하여 제출한 풀이의 결과이다.

 

리뷰

우선 내장 함수를 이용하는 것이 코드도 간단하고 더욱 빠르게 해결되는 점을 확인할 수 있다.

아무래도 for loop를 이요하여 전체를 다 비교하는 방식보다는 내장함수에서 그보다 빠르게 수행 가능한 binary search같은 방식을 채택하고 있는 듯하다. 

 

그럼 python에서 같이 제공하는 method에는 어떤 차이가 있는지 궁금하여 테스트 해보기로 하였다.

sort()를 이용하여 정렬한 후, list의 최초의 값과 마지막 값을 출력하는 것은 어떤지 확인해 보자.

 

코드는 다음과 같다.

N = int(input())
arr = list(map(int, input().split()))

arr.sort()

print(arr[0],arr[N-1])

 

결과는 다음과 같다. 

>>> 예상은 했지만 역시 sorting 하는데 시간이 꽤 많이 걸리는 점을 확인할 수 있었다.

 

결론

python의 장점을 살리기 위해선 지금 내가 필요한 작업에 적합한 내장함수를 최대한 활용하여 코드길이도 줄이고 가독성도 높이면 성능도 좋아질 가능성이 높다.

https://www.acmicpc.net/problem/10871


풀이
N, X = map(int, input().split())
A = list(map(int, input().split()))

for i in range(N):
    if A[i] < X:
        print(A[i], end=" ")

 

결과값들을 다른 배열에 저장하여 처리하고 싶었지만, 출력만 나오면 되는 문제이기에 print()함수의 end 를 이용하여 문제에서 요구하는 출력에 맞추도록 집중하였다.

https://www.acmicpc.net/problem/10807


풀이
N = int(input())
arr = list(map(int, input().split()))
v = int(input())

print(arr.count(v))

 

+ Recent posts