Post

백준 단계별 풀기 (1차원배열)

개수세기

1
2
3
4
5
6
7
8
9
10
11
a = int(input())
a_list = list(map(int,input().split()))
b = int(input())
c = 0
for i in range(a):
    i += 1
    if int(a_list[i-1]) == b:
        c += 1
        
print(c)
    

수정

1
2
3
4
5
6
7
8
9
a = int(input())
a_list = list(map(int,input().split()))
b = int(input())
c = 0
for i in range(a):
    if a_list[i-1] == b:
        c += 1
        
print(c)

X보다 작은 수

1
2
3
4
5
6
7
a, X = map(int, input().split())
a_list = list(map(int,input().split()))

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

최소값, 최대값

1
2
3
4
5
6
7
8
9
10
11
12
13
a = int(input())
c = list(map(int, input().split()))
ma = c[0]
mi = c[0]

for i in range(a):
    if c[i] < ma:
        ma = c[i]
    elif c[i] > mi:
        mi =  c[i]

print(ma,mi)

최대값과 길이

1
2
3
4
5
6
7
8
9
10
num = 0
le = 0
for i in range(9):
    a = int(input())
    if a > num:
        num = a
        le = i

print(num)
print(le+1)

공넣기

문제 이해

5 4 1 2 3 3 4 4 1 4 1 2 2 2

이걸 잘보면 n은 바구니의 개수이고 m은 배열의 개수라서 3개의 숫자를 입력받을건데 그건 m번동안 받을 거임

앞의 2개의 숫자는 i~j까지의 바구니에 k만큼 공을 넣는다는 뜻임 k가 ` b[i~j] ` 까지가 k로 대체된다는 말임

그래서 for문을 안에 한 번더 넣어주는데 바깥으로 빼버리면 계속해서 바구니를 업데이트를 안시킴 만약 1~3번바구니에 4를 전부 넣엇는데 4 4 4 0 0 그 다음 던지는 배열이 시작할때 바구니를 업데이트 해줘야함

3~4번바구니에 1을 넣으면 4 4 1 1 0 이 되어야하는데 그걸 못해줌 그냥 배열까지 반복해서 k를 넣고 끝남 그래서 m번의 배열이 반복되는동안 계속 바구니를 업데이트 해줘야하는거임

그리고 num-1을 하는 이유는 i 가 1 j가 2 거기에 +1을 해서 1,3까지가 되었는데 베열은 0부터 시작함 근데 1부터 넣어버리면 꼬이기 때문에 -1을 해주는거임

마지막 출력 반복문은 그냥 b를 출력해버리면 리스트형식으로 출력해버리는데 숫자를 출력해야함 그래서 각 자리수의 숫자를 가져오게 반복하는거임 그리고 end = “ “로 한 줄로 출력해버리게 하는거

n이 5 이면 0,5까지 반복하는데 실제로는 0 1 2 3 4 까지임 그래서 o가 0 1 2 3 4가 되고 매번 b의 배열안에 있는 숫자를 가져오는거지

처음에 b를 배열 0 으로 곱해주는것은 아무것도 안들어있다면 0으로 출력해주기 위해서!

1
2
3
4
5
6
7
8
9
10
n, m = map(int,input().split())
b = [0] * n

for _ in range(m):
    i, j, k = map(int,input().split())
    for num in range(i,j+1):
        b[num-1] = k

for o in range(n):
    print(b[o], end = " ")

공 바꾸기

먼저 하나의 다른 변수에 i의 번호를 저장해두고 그다음 i를 j로 바꾼다 그 후에 j 를 변수와 같다고 지정하면 j가 지정하고 난 뒤에 바뀌니까 상관 ㄴ

1
2
3
4
5
6
7
8
9
10
11
n, m = map(int, input().split())
b = [a for a in range(1,n+1)]

for _ in range(m):
    i, j = map(int, input().split())
    re = b[i-1]
    b[i-1] = b[j-1]
    b[j-1] = re
    
for num in range(n):
    print(b[num], end =" ")

과제 안내신분?

1
2
3
4
5
6
7
8
sub = [i for i in range(1,31)]

for _ in range(28):
    a = int(input())
    sub.remove(a)

print(min(sub))
print(max(sub))

1부터 30까지의 번호를 sub의 리스트에 넣는다. (a)는 리스트안의 들어있는 숫자중 만약 a가 4라면 4를 삭제한다. ` [] ` 저건 그 배열의 특정 위치

Remove() 메서드는 인덱스가 아닌 값을 인수로 사용. 인덱스 1의 요소를 제거하려면 대신 pop() 메서드나 del 문을 사용할 수 있다 예를 들어:

sub = [3,6,7,8,9,0]

sub.pop(1) # 인덱스 1의 요소를 제거하고 반환.

print(sub) # [3, 7, 8, 9, 0]을 인쇄.

sub = [3,6,7,8,9,0]

del sub1 # 인덱스 1의 요소를 제거.

print(sub) # [3, 7, 8, 9, 0]을 인쇄.

나머지

1
2
3
4
5
6
7
8
a = []

for i in range(10):
    b = int(input())
    if b % 42 not in a:
        a.append(b % 42)

print(len(a))

not in 이 포인트고 append시() 로 하기

바구니 바꾸기

1
2
3
4
5
6
7
8
9
10
11
12
13
N, M = map(int, input().split())
 
basket = [n for n in range(1,N+1) ]
 
for _ in range(M):
   i, j = map(int, input().split())
   temp = basket[i-1:j]
   temp.reverse()
   basket[i-1:j] = temp 
   
for i in range(N):
    print(basket[i], end=" ")

게임은 거꾸로 바꾸는 거임 1, 4 를 받앗다고 해서 1번부터 4번까지의 숫자가 역순으로 정렬되는게 아니라 1번은 4번이 되고 2번은 3번이 되는 이런식으로 reverse가 되는거임

먼저 temp에 첫번째 i가 1이고 첫번쨰 j가 4라면 b[1-1:4]가 되는건데 1-1은 0이니까 0:4가 됨 근데 f리스트 슬라이스는 4를 선택하지 않음 0.1.2.3까지임 그래서 j는 +1을 안해줘도 어차피 4니까 상관이 없음 애초에 리스트에는 0.1.2.3.4 까지의 숫자만 있는거임 만약 4를 선택하는거엿다면 j-1을 해줬어야함 무튼 그렇게 0:4라는 값을 temp에 넣고 거꾸로 만들어줌 1 2 3 4 5 첫 바구니가 이거엿다면

1과 4가 거구로 되고 2와 3이 거꾸로 돼서 4 3 2 1 이됨 근데 바구니가 2 1 4 3 5 엿다면 2와 3의 위치를 바꾸고 1과 4의 위치를 바꿔서 3 4 1 2 가 되는거임 무튼 그렇게 거꾸로 만든값을 b[i-1:j]의 값에 넣어줌 다시

평균구하기

1
2
3
4
5
6
7
8
n = int(input())
a = list(map(int, input().split()))
b = max(a)
f = 0
for i in range(n):
    f += a[i] / b * 100
    
print(f / n)
This post is licensed under CC BY 4.0 by the author.