백준 4단계 1차원 배열 알고리즘 문제를 풀어보도록 하겠습니다.
# 10807 개수 세기
- 입력된 정수 중에서 해당되는 정수가 몇 개인지 출력하는 문제입니다.
N = int(input())
num = map(int, input().split())
v = int(input())
result = 0
for i in range(N):
if v in num: #정수 v가 num 안에 있으면
result += 1
print(result)
저는 result 변수를 만든 후 정수 v가 안에 있으면 1씩 더하는 방식을 사용했습니다.
위에 코드처럼 문제를 푼 후 더 짧게 할 방법을 생각해서 줄였습니다.
코드 길이가 50 가까히 줄었습니다.
# 10871 X보다 작은 수
- 수열에서 정수 X보다 작은 수를 출력하는 문제입니다.
n, x = map(int, input().split())
a = list(map(int, input().split())) # 수열 a를 리스트로 생성
for i in range(n):
if a[i] < x:
print(a[i], end = ' ')
X보다 작은 수를 구하기 위해 리스트로 만든 후 indexing으로 X보다 작은 수를 찾은 후 출력했습니다.
문제는 한 번에 맞췄습니다.
# 10818 최소, 최대
- 정수 N개를 최솟값과 최댓값을 출력하는 문제입니다.
n = int(input())
a = list(map(int, input().split()))
print(min(a), max(a))
저는 min() 함수와 max()함수로 최솟값과 최댓값을 출력했습니다.
문제는 한 번에 맞췄습니다.
# 2562 최댓값
- 숫자 9개 중 최댓값과 index를 출력하는 문제입니다.
a = []
for i in range(9):
x = int(input())
a.append(x)
print(max(a), a.index(max(a))+1)
a라는 리스트를 만들었습니다.
그리고 .append() 함수로 입력하는 값을 넣은 후,
최댓값과 인덱스를 출력하였습니다.
파이썬의 인덱스는 0부터 시작하기 때문에 + 1을 했습니다.
제가 리스트를 만들지 않고 하다가 깨달음을 얻고 리스트를 생성한 후 정답을 맞췄습니다.
# 10810 공 넣기
- 각 바구니에 어떤 공이 들어있는지 구해 출력하는 문제입니다.
n, m = map(int, input().split()) # n은 바구니 개수, m은 바구니 번호
basket = []
for num in range(n):
basket.append(int())
for num1 in range(m):
i, j, k = map(int, input().split()) # i, j는 바구니 index, k는 공 번호
for num2 in range(i-1, j):
basket[num2] = k
for num2 in basket:
print(num2, end =' ')
이번 문제는 정말 어려웠습니다.
basket 리스트를 생성한 후에 인덱스를 활용하여 공을 넣었습니다.
출력하는 방법을 잘못해서 한 번 틀렸습니다.
# 10813 공 바꾸기
- 바구니에 들어있는 공을 바꾸는 문제입니다.
n, m = map(int, input().split())
basket = [num + 1 for num in range(n)] # for문, 리스트 컴프리핸션
for _ in range(m):
i, j = map(int, input().split())
if i < j:
ia = basket[i-1]; ja = basket[j-1] # 공 번호를 저장
basket[i-1] = ja; basket[j-1] = ia # 공 교환
print(*basket) # 리스트 내용을 풀어 출력하는 방식
코드 길이를 줄여보려고 리스트 컴프리핸션을 사용하여 리스트 내부에서 코드를 작성했습니다.
그리고 ia와 ja에 공번호를 저장한 후에 교체했습니다.
공 번호를 저장하는 방식을 생각하지 못해서 3번 틀렸습니다.
# 5597 과제 내신 분..?
- 과제를 제출 안 한 학생의 출석번호를 출력하는 문제입니다.
n = [i for i in range(1, 31)] # 1부터 30까지, 학생 번호
a = [int(input()) for _ in range(len(n)-2)] # 과제 제출
for i in range(len(n)):
if n[i] not in a:
print(n[i])
출석부와 과제 제출 번호를 리스트로 만든 후에 not in을 사용하여 없을 시 출력하도록 작성했습니다.
이번 문제는 어렵지않게 한 번에 맞췄습니다.
# 3052 나머지
- 42로 나눈 나머지가 서로 다른게 몇 개인지 출력하는 문제입니다.
n = [int(input()) for _ in range(10)]
li = []
for i in range(10):
if n[i] % 42 not in li: # 리스트 안에 없을 때
li.append(n[i]%42) # 42로 나눈 나머지를 리스트에 추가
print(len(li)) # 리스트 길이로 개수 출력
li란 리스트를 만든 후 42로 나눈 나머지가 리스트 안에 없을 시 더한 후 길이를 출력했습니다.
출력하는 방법을 잘못해서 한 번 틀렸습니다.
# 바구니 뒤집기
- 바구니의 순서를 역순으로 바꾸는 문제입니다.
n, m = map(int, input().split())
basket = [i+1 for i in range(n)] # 바구니 리스트 생성
for _ in range(m):
i, j = map(int, input().split())
if i < j:
ist = basket[i-1:j-1]; jst = basket[j-1:i-1:-1] # 해당 번호를 ist와 jst에 저장
basket[i-1:j-1] = jst; basket[j-1:i-1:-1] = ist # 부여
print(*basket)
10813과 문제를 푸는 방식은 비슷했습니다. 다만 슬라이싱하여 ist와 jst에 저장하는 방식만 달리 했습니다.
문제는 10813문제 덕분에 한 번에 풀었습니다.
# 1546 평균
- 원래 점수에서 연산을 한 후 평균을 구하는 문제입니다.
n = int(input())
a = int()
grade = list(map(int, input().split())) # 원래 점수
newGrade = [grade[i]/max(grade)*100 for i in range(n)] # 연산한 후 점수
for i in range(n):
a += newGrade[i]
print(a/n)
원래 점수를 grade에 저장하고 연산한 후의 점수를 newGrade에 저장한 후 더해서 출력했습니다.
문제는 어렵지 않게 한 번에 맞췄습니다.
지금까지 3단계 반복문에 있는 12문제를 풀어봤습니다.
제가 정답을 맞추는 과정을 기록하는 글입니다.