코딩라이브러리/파이썬

파이썬 리스트 배열 list (with 백준 5597, 10250)

유니네 라이브러리 2024. 5. 22. 19:14

일차원 & 이차원 리스트 다루기

append(), insert()로 값 추가

pop(), remove(), del로 값 삭제

백준 문제(5597, 10250)로 실전 연습

 

📌 파이썬 리스트 기본 사용법

 

🔹 일차원 리스트

A = ['a', 'b', 'c', 'd', 'e']
B = ['가', '나', '다', '라', '마']

print(A)  # ['a', 'b', 'c', 'd', 'e']
print(B)  # ['가', '나', '다', '라', '마']

 

🔹 이차원 리스트

A = [['a', 'b'], ['c', 'd'], ['e', 'f']]

print(A)       # [['a', 'b'], ['c', 'd'], ['e', 'f']]
print(A[0])    # ['a', 'b']
print(A[0][0]) # a

 

📌 리스트 값 추가 (append, insert)

 

🔹 append() : 리스트 마지막에 추가

A = []
A.append("a")
A.append("b")
A.append("c")

print(A)  # ['a', 'b', 'c']

 

🔹 insert(index, value) : 원하는 위치에 추가

A = ['a', 'b', 'c', 'd']
A.insert(2, "F")

print(A)  # ['a', 'b', 'F', 'c', 'd']

 

🔹 이차원 리스트에 값 추가

A = [['a', 'b'], ['c', 'd']]
A.append(['e', 'f'])   # 마지막에 추가

print(A)  # [['a', 'b'], ['c', 'd'], ['e', 'f']]
A.insert(1, ['g', 'h'])  # 특정 위치(1)에 추가

print(A)  # [['a', 'b'], ['g', 'h'], ['c', 'd'], ['e', 'f']]
A[1].insert(1, 'X')  # 특정 이차원 리스트 내부에 삽입

print(A)  # [['a', 'b'], ['g', 'X', 'h'], ['c', 'd'], ['e', 'f']]

 

📌 리스트 값 삭제 (pop, remove, del)

 

🔹 pop(): 특정 인덱스의 값을 제거하고 반환

A = ['a', 'b', 'c', 'd']
print(A.pop())  # 'd' 반환
print(A)        # ['a', 'b', 'c']

print(A.pop(0))  # 'a' 반환
print(A)         # ['b', 'c']

 

🔹 remove(value): 특정 값을 찾아 삭제 (첫 번째 값만 삭제)

A = ['a', 'b', 'b', 'c']
A.remove('b')

print(A)  # ['a', 'b', 'c']

 

🔹 del: 특정 인덱스 또는 범위 삭제

A = ['a', 'b', 'c', 'd', 'e']

del A[0]  # 첫 번째 요소 삭제
print(A)  # ['b', 'c', 'd', 'e']

del A[1:3]  # 1번 ~ 2번 인덱스 삭제
print(A)  # ['b', 'e']

 

📌 리스트 연습 문제 풀이 (백준 5597, 10250)

 

🔹 백준 5597번: 과제 안 내신 분..?

#입력값 받기
inputRow = [input() for _ in range(28)]

#출력 변수 선언
rtn = []

#문제풀이 (모든 출석번호(1~30)에서 제출한 번호 제거)
for i in range(1, 31):  
    if (inputRow.count(str(i)) == 0):
        rtn.append(i)
rtn.sort()

#결과 출력
print(*rtn, sep="\n")

설명

✔ inputRow 리스트에 입력된 출석번호 저장

rtn 리스트에 제출하지 않은 번호 저장

sort()로 정렬 후 출력

 

🔹 백준 10250번: ACM 호텔

#입력값 받기
T = int(input())
tData = [input().split(" ") for _ in range(0, T)]
rtn = []

#문제풀이
for i in range(0, T):
    # 호텔 층수, 방 개수, 몇 번째 손님인지
    H = int(tData[i][0]) #호텔의 층 수
    W = int(tData[i][1]) #각 층의 방 수
    N = int(tData[i][2]) #몇 번째 손님
    if N % H == 0: #층 꼭대기이면
        line = N // H
        floor = H
    else:
        line = (N // H) + 1 #몇 호 라인인지
        floor = N - (H * ( N // H )) #몇 층인지
        #floor = N - (H * (line - 1)) #몇 층인지
    ho = str(floor) + str(line).zfill(2)
    rtn.append(ho)
    
#결과 출력
print(*rtn, sep="\n")

설명

floor: 손님이 묵을 층 계산 (N % H로 계산)

✔ line: 손님이 묵을 방 라인 ((N // H) + 1로 계산)

✔ zfill(2) 포맷을 사용하여 두 자리 숫자로 맞춤 (01, 02, ...)

 

✅ 마무리 정리

 

리스트 추가 → append(), insert()

리스트 삭제 → pop(), remove(), del

1차원 & 2차원 리스트 활용법

실전 문제(백준 5597, 10250)로 연습했다.