💻IT Dev/Algorithm

[BOJ/Python] 10807 개수 세기

꾸우._. 2023. 6. 5. 14:34
728x90

📌 문제

 

10807번: 개수 세기

첫째 줄에 정수의 개수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 정수가 공백으로 구분되어져있다. 셋째 줄에는 찾으려고 하는 정수 v가 주어진다. 입력으로 주어지는 정수와 v는 -100보다 크거

www.acmicpc.net

 

 

📌 내 코드

# 10807 개수 세기
import sys
input = sys.stdin.readline

n = int(input())
li = list(map(int, input().split()))
v = int(input())

cnt = 0
for i in range(n):
    if v == li[i]:
        cnt += 1
print(cnt)

💡 풀이

  1. 입력 값에서 여러 숫자를 한 줄에 다 받는 걸 보고 리스트 자료형을 활용하고자 했다.
  2. 그래서 입력 받는 숫자 갯수 n, n개의 숫자를 담을 리스트 li, 찾고자 하는 수를 담을 v를 선언해준다.
  3. li 안에 있는 v와 일치하는 수의 갯수를 체크하기 위해 변수 cnt를 선언 후 0으로 초기화 해준다.
  4. for문을 n번 돌린다.
    • 찾고자 하는 수 v와 반복할 때 리스트 li의 인덱스 값에 위치하는 수를 비교한다. 
    • 이 때, 일치하면 cnt에 +1을 해주어 v와 일치하는 수의 갯수를 체크한다.
  5. n번까지 for문을 다 돌고 나서 빠져나와 cnt를 출력해준다.

 

 

📌 정리

이제껏 단순 반복이었다면 이번에는 리스트 자료형을 활용해 입력되는 여러 값을 받아 담아주고, 리스트의 각 인덱스에 담긴 값을 리스트 안에서 찾고자 하는 수 v와의 일치 여부를 확인해 갯수를 체크 후 cnt에 담아 출력했다.

그런데 문제 채점 시간이 길었던 부분이 맘에 걸렸는데, 그 이유가 리스트 때문인건지, for문과 그 안의 if문 때문에 시간복잡도에 영향을 끼친 건지를 잘 모르겠다. 이 부분에 관해서는 더 찾아보고, 곧 1차원 배열 문제도 풀기 시작해야 하니 배열과 관련해 기초 개념을 복습해야겠다.

 

 

적극적인 피드백은 언제나 환영입니다:)