[BAEKJOON] 4단계_1차원 배열 본문

IT/코테문제

[BAEKJOON] 4단계_1차원 배열

호랑구야 2023. 10. 20. 09:00

 

julia319 정보

시도했지만 맞지 못한 문제

www.acmicpc.net

 

10807번 개수 세기

주어진 숫자가 아주 많을 때, 변수를 일일히 지정하는 방식이 아니라 배열을 이용할 수 있다. list 함수로 묶으면 list로 선언이 가능하다. 이후 리스트에 어떤 요소가 몇 개 있는지 확인하는 방식은 리스트.count(궁금한것)을 이용한다. count 함수의 세부 요소는 찾고 싶은 문자, 시작 문자열 위치(포함O), 마지막 문자열 위치(포함X)이 있고, 뒤의 두 요소는 생략할 경우 문자열 전체를 범위로 한다. 자세한 사용법은 이 블로그에서 확인했다.

N = int(input())
L = list(map(int, input().split()))
v = int(input())

result = 0

for i in L:
    if i == v:
        result += 1
    else:
        continue;
        
print(result)

2562번 최댓값

더보기

이전에 기술면접에서 틀렸던 문제였다. index 요소를 활용할 수 있는 것은 알았는데 너무 긴장한 탓이었나..

리스트에서 index 요소를 활용하고 싶을 때는, 리스트.index(리스트 요소값)을 활용하면 된다. 만약 list X의 내부 요소 중 45의 위치가 궁금하다면, X.index(45)를 출력하면 된다. 문제에서는 몇 번째 위치냐고 물었으니 인덱스 값에 1을 더한 값을 출력해야 한다. 인덱스는 0부터 시작하기 때문이다.

L = []

for i in range(9):
    L.append(int(input()))

Max = max(L)
idxMax = L.index(Max)

print(Max)
print(idxMax + 1)

10810번 공넣기

리스트를 범위를 두고 값을 지정하기 위해서는 for문을 사용해야 한다. 또한, 바구니의 숫자는 1부터 시작하지만 인덱스는 0부터 시작한다. 인덱스와 실제 숫자 사이의 관계를 초반에 표기해두는 것이 좋다. 출력할 때도, 리스트의 값만을 출력하기 위해 for문을 활용한다.

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

# L [0, 0, ...] idx = N까지 존재
L = [0] * (N + 1)

for m in range(M):
    i, j, k = map(int, input().split())
    
    for a in range(i, j+1, 1):
        L[a] = k

for a in L[1:]:
    print(a, end = ' ')

 

 

10813번 공 바꾸기

파이썬에서 swap을 하는 방법은 a, b = b, a를 사용하는 것이다. 또한 바구니의 번호는 실제 숫자, 리스트의 인덱스는 0부터 시작이므로, 애초에 1부터 N까지만 활용하도록 설계한다. 이 때, 0번 인덱스에는 0을 두고, 이 후 for문을 활용할 때는 전부 1부터 시작하기로 한다.

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

# 인덱스 0은 활용X
L = [i for i in range(N+1)]

for i in range(M):
    i, j = map(int, input().split())
    
    L[i],L[j] = L[j],L[i]

for i in L[1:]:
    print(i, end = ' ')

5597번 과제 안 내신 분..?

인덱스가 30까지 있는 리스트에 모든 값을 0으로 두고 선언한다. 입력된 값을 학생의 번호로 두어, 과제를 제출하면, 리스트 값을 1로 바꾼다. 이후 인덱스가 0이 아니고, 리스트의 값이 0인 인덱스값을 모두 출력한다.

혹은 리스트의 인덱스를 1부터 30까지의 범위를 두고 enumerate한 for문을 돌리고 리스트의 값이 0인것의 갯수 인자에 1을 더한 것을 출력한다.

L = [0] * 31

for i in range(28):
    n = int(input())
    L[n] = 1

for _, i in enumerate(L[1:]):
    if i == 0:
        print(_+1)

10811번 바구니 뒤집기

바구니의 순서를 뒤집는 것이기 때문에, 원래의 값을 기억하고 있을 tmp를 따로 선언해두어 활용했다. 뒤집기 시작할 위치와 끝낼 위치의 간격만큼 for문을 돌렸다. 바꾸는 것이 적용될 바구니의 인덱스는 하나씩 늘어나고, 그 값을 대체할 tmp의 인덱스는 하나씩 줄어들게 두었다. 

N, M = map(int, input().split())
L = [i for i in range(N + 1)]
for _ in range(M):
    i, j = map(int, input().split())
    
    tmp = L[:]
    for a in range(j+1 - i):
        L[i + a] = tmp[j - a]
        
for i in L[1:]:
    print(i, end = ' ')
반응형

'IT > 코테문제' 카테고리의 다른 글

[BAEKJOON] 6단계_심화1  (1) 2023.10.24
[BAEKJOON] 5단계_문자열  (0) 2023.10.23
[BAEKJOON] 3단계_반복문  (1) 2023.10.19
[BAEKJOON] 2단계_조건문  (0) 2023.10.18
[BAEKJOON] 1단계_입출력과 사칙연산  (1) 2023.10.17
Comments