태풍이 올라오고 있어 비와 바람이 많은 날씨이다.
우산을 들고 터벅터벅 걸어 카페에 도착했다.
아무고토 하고싶지않지만 그럴 수 없기에 시작했다..
개발 코드에 빠지지 않는 것 중 가장 비중이 큰거같다고 개인적으로 생각한다.
1차원을 넘어 다중으로 사용하게 되면 머리가 너무 아플것같다.
리스트 요소 추가
a = [1, 2, 3, 4]
a.append(5)
print(a) # [1, 2, 3, 4, 5]
a.insert(0, 6)
print(a) # [6, 1, 2, 3, 4, 5]
a.extend([10,11,12,13])
print(a) # [6, 1, 2, 3, 4, 5, 10, 11, 12, 13]
append = 리스트 맨뒤에 값을 추가하는것이다.
insert(x, y) = 인덱스 x 에 y 값을 추가하는것이다.
extend = 리스트 맨뒤에 더하는것이다. (더하기 연산자를 이용하여 리스트를 더할 수 도있다. 이는 비파괴적으로 동작한다.)
위 코드 출력문을 확인해보라.
리스트 요소 제거
a = [1, 2, 3, 4]
del a[0]
print(a) # [2, 3, 4]
a.pop(0)
print(a) # [3, 4]
a.remove(4)
print(a) # [3]
a.clear()
print(a) # []
del [x] = 인덱스 x에 있는 요소를 지운다.
pop(x) = 인덱스 x에 있는 요소를 지운다.
remove(x) = 요소(x)를 제거한다.
clear = 모든 요소 제거
위 코드 출력문을 확인해보라.
요소 정렬
a = [100,1,40,20,5,101,42]
a.sort()
print(a) # [1, 5, 20, 40, 42, 100, 101]
a.sort(reverse=True)
print(a) # [101, 100, 42, 40, 20, 5, 1]
sort() = 요소들을 오름차순으로 정렬
sort(reverse=True) = 요소들을 내림차순으로 정렬
요소 존재 확인
a = [1,40,20,5]
print(40 in a) # True
print(4 in a) # False
print(4 not in a) # True
백준 1차원 배열 문제를 풀어보자
[10818] 최소, 최대
해결 포인트
리스트를 받고 소트로 정렬한 다음 첫 인덱스와 끝인덱스를 출력하면 된다.
답안
a = int(input())
b = list(map(int,input().split()))
b.sort()
print(b[0],b[-1])
[2562] 최댓값
해결 포인트
리스트를 만들어 append를 이용하여 9번 받고 max를 이용하여 최댓값 출력과 해당 인덱스를 알아내고 +1 시킨다.
이전 문제에선 최댓값을 소트하여 출력했지만 보다 간단한 max를 사용했다.
답안
a = []
for i in range(9):
a.append(input())
print(max(a))
print(a.index(max(a))+1)
[3052] 나머지
해결 포인트
반복문을 사용하여 리스트 a에 10개의 자연수를 넣고 이와 동시에 리스트 b에는 42를 나눈값을 넣어준다.
여기까지는 수월하게 진행했다. 그러나... 두개의 리스트를 비교하는것에 좀 막혔다..
다중 포문으로 하나하나 비교하는것으로 짜봤지만 쉽지않았다...
리스트 비교 관련 함수를 찾던중 set() 이란것을 찾았고 이를 활용해 보았다.
set()함수는 리스트내 중복된 값을 찾아 없애고 나머지를 집합으로 만들어 준다.
set()을 적용해주고 len를 이용해 갯수를 카운트 해줬다.
답안
a = []
b = []
for i in range(10):
a.append(input())
b.append(int(a[i])%42)
print(len(set(b)))
[1546] 평균
해결 포인트
리스트 m을 받고 이중 최댓값을 변수 a에 저장한다.
반복문을 이용해 리스트 m 길이 만큼
i 값을 이용해 리스트 각 요소에 점수/a*100을 한 값을 넣어준다.
평균을 구하기 위해 변수 z에 더해준뒤
마지막 출력문때 리스트 길이만큼 나눠준다.
답안
n = int(input())
m = list(map(int,input().split()))
a = max(m)
z = 0
for i in range(n):
m[i] = (m[i]/a)*100
z = z+m[i]
print(z/len(m))
[8958] OX퀴즈
해결 포인트
진짜... 어려웠다.. 머리가 너무 복잡했다.
다중 포문을 사용한점.. 각 포문의 라인별 출력을 확인하여 로직을 파악하여 짰으며
점수를 더하고 초기화 하는 로직을 어느 라인에서 구동시킬지 많은 고민과 시간이 소요됬다.
첫 줄에 입력받는 수만큼 OX를 입력받게 포문을 사용하였다.
리스트에는 이중으로 데이터가 입력돠었으며
본 로직의 OX 구별 또한 [][] 이중 리스트를 사용하여 구분하였다.
이중 리스트인만큼 포문도 이중으로 사용하였다....
반복문이 아직 익숙지 않은 분들은 각 라인별로 print를 통해 데이터의 흐름을 파악해보는것도 좋다.
참고할만한 좋은 사이트 하나 소개한다.
Python Tutor: Learn Python, JavaScript, C, C++, and Java by visualizing code
해당 사이트에 코드를 입력하면 스탭별로 로직 흐름을 알 수 있다.
오래걸리더라도 꼭해보길 권한다.
답안
a = int(input())
b = []
count = 0
sum = 0
for i in range(a):
s = input()
b.append(s)
for j in range(len(b)):
for n in range(len(b[j])):
if b[j][n] == "O":
count += 1
sum += count
elif b[j][n] == "X":
count = 0
count = 0
print(sum)
sum = 0
카페가 태풍땜에 정신이 없어 일찍닫는다...
얼른 마무리하고 집가야겠다!
'코딩 > 백준알고리즘' 카테고리의 다른 글
[파이썬] 6. 리스트 + 반복문...백준(15552, 11021, 11022, 2438, 2439, 10871, 10952, 10951, 1110) (0) | 2022.09.07 |
---|---|
[파이썬] 5. 리스트 + 반복문...백준(4344, 2739, 10950, 8393, 25304) (0) | 2022.09.06 |
[파이썬] 3. 출력문 뿌시기 백준(2588 외..) (0) | 2022.09.02 |
[파이썬] 2.조건문 뿌시기..백준(9498, 2753, 14681, 2884, 2525, 2480) (0) | 2022.09.01 |
[파이썬] 1. 다국어는 어렵다..백준(1330) (0) | 2022.08.31 |