간단하게 푼 코드

scores = \
    [[80, 80, 81],
     [84, 92, 63],
     [63, 73, 97],
     [69, 93, 85],
     [83, 84, 93]]

for student_num, ave in enumerate(scores):
    print(f"{student_num + 1} : {round(sum(ave)/len(ave))}")

 

 

더 복잡하게 푼 코드

print("[국, 영, 수]")
print("-"*32)

for row in range(len(scores)):
    s = 0
    for column in range(len(scores[row])):
        s += scores[row][column]
    print(f"{scores[row]}  합: {s}  평균: {round(s/len(scores[row]), 2)}")

 

'프로그래밍 > Python' 카테고리의 다른 글

Python - 개수 지정 없이 매개변수 전달  (0) 2023.10.13
Python - Lambda함수  (0) 2023.10.08
Python 문자열 정렬, set  (0) 2023.10.08
Python zip, enumerate 함수 사용  (2) 2023.10.08
Python 비트 연산자 정리  (0) 2023.10.07
print(say.center(10))     
# 숫자만큼 자릿수를 잡은 후, 문자열을 가운데 배치

print(say.center(10, "#"))
# 숫자만큼 자릿수를 잡은 후, 문자열을 가운데 배치
# 문자열을 제외한 다른 자리에는 #으로 채우기

print(say.ljust(10))
# 숫자만큼 자릿수를 잡은 후, 왼쪽에 붙여 출력
print(say.rjust(10))
# 숫자만큼 자릿수를 잡은 후, 오른쪽에 붙여 출력

print(say.zfill(10))
# 오른쪽으로 붙여쓰고 왼쪽 빈 공간은 0으로 채움.

 

set 자료형

> 중복 허용 X

> 입력된 순서는 중요하지 않음.

> set( ) 생성자 함수를 통해 만듦.

> { } 를 이용해서 만들 수 있음. (딕셔너리와 같은 중괄호 사용, 구분 유의)

> add, update, remove, copy, clear method 사용 가능

> 사용예시

> 집합연산과 세트함수

> 여러 자료형 저장이 가능하지만, 중복은 허용 안함.

> set에는 순서가 없기 때문에 index 사용 못 함. 

> 사용예시 2

 

a_list = ["A", "B", "C", "D", "E"]
a_list = list("ABCDE")              # 둘 다 똑같은 리스트

n_list = [65, 66, 67, 68, 69, 70]
n_list = [ascii for ascii in range(65,71)] # 이 방법 중요 

z_list = list(zip(a_list, n_list))
print(z_list)

# zip함수 : 동일한 개수로 이루어진 자료형을 튜플로 묶어줌.

## 결과: [('A', 65), ('B', 66), ('C', 67), ('D', 68), ('E', 69)]

 

 

enumerate 사용 X

x_list = [54, 50, 71, 58, 59]
index = 0

for item in x_list:
    print(f"[{index: 2d}] {item} ", end ='')
    index += 1

 

enumerate 사용 O

for index, item in enumerate(x_list):
    print(f"[{index: 2d}] {item} ", end = '')
# 인덱스 시작 번호 지정 가능

for index, item in enumerate(x_list, start = 1):
    print(f"[{index: 2d}] {item} ", end = '')

 

# 비트 논리곱(&) 연산자

# A B    A&B
# 0 0    0
# 0 1    0
# 1 0    0
# 1 1    1      >>> 0011 => 3  / 0101 => 5
5 & 3  ##결과 : 1

 

# 비트 논리합(|) 연산자

# A B    A&B
# 0 0    0
# 0 1    1
# 1 0    1
# 1 1    1
3 | 5  ## 7

 

# 비트 배타적 논리합(^) 연산자

# A B    A&B
# 0 0    0
# 0 1    1
# 1 0    1
# 1 1    0     >>> 두 값이 같으면 0, 다르면 1
5 ^ 3 ## 6

 

# 왼쪽 시프트(<<) 연산자

# 00011010 = 26
# 01101000 = 104  앞의 두 비트(00)는 사라짐. 뒤의 두 비트는 0으로 채움.
# 왼쪽으로 시프트할 때마다 2^n을 곱한 효과가 나타남.
ex = 10
expr = f"{ex << 1} {ex << 2} {ex << 3} {ex << 4}"
print(expr)

 

# 오른쪽 시프트(>>) 연산자

# 00011010 = 26
# 00000110 = 6   앞의 두 비트는 부호 비트(0)으로 채우고 뒤의 두 비트는 사라짐.
# 오른쪽으로 시프트할 때마다 2^n으로 나눈 효과
# 시프트 연산은 정수만 연산하므로 몫만 남음. (26/2^2 = 6)
ex2 = 10
expr2 = f"{ex >> 1} {ex >> 2} {ex >> 3} {ex >> 4}" 
print(expr2)

 

# 보수(~) 연산자

# 두 수에 대해 연산하는 것이 아니라, 각 비트를 반대로 만드는 연산자

# 1의 보수
# 0 >> 1 
# 1 >> 0
# 0111 1000 >> (1의 보수) = 1000 0111
a = 12345
~a   # -12346


# 2의 보수
# 1의 보수 + 1 = 2의 보수
# 0111 1000 >> 2의 보수
# = 1의 보수 + 1
# = 1000 0111 + 1
# = 1000 1000
a = 12345
~a + 1 # -12345

'프로그래밍 > Python' 카테고리의 다른 글

Python 문자열 정렬, set  (0) 2023.10.08
Python zip, enumerate 함수 사용  (2) 2023.10.08
파이썬 매개변수 기본값 설정  (0) 2023.10.06
Anaconda 기반의 Python 개발환경 구축  (0) 2023.04.25
파이썬 (~while)  (0) 2023.04.25
def f_01(x, y, z = 0):   
# 기본값 설정은 항상 기본값이 설정되지 않은 매개변수 뒤에 와야함. (위반 시 오류 발생)
	return x + y + z 
    
s = f_01(20, 30)
print("func_01(10,20) 호출 후 반환 값:", s) #이러면 50이 출력됨.

s = func_01(20, 30, 50)
print("func_01(10, 20, 30) 호출 후 반환 값:", s) #이러면 100이 출력됨.

함수 선언 시 매개변수의 기본값을 설정해두면, 

함수 사용 시 해당 매개변수 생략 가능 

기본값이 정해져 있지 않은 매개변수는 반드시 값을 전달해줘야 함. 

'프로그래밍 > Python' 카테고리의 다른 글

Python 문자열 정렬, set  (0) 2023.10.08
Python zip, enumerate 함수 사용  (2) 2023.10.08
Python 비트 연산자 정리  (0) 2023.10.07
Anaconda 기반의 Python 개발환경 구축  (0) 2023.04.25
파이썬 (~while)  (0) 2023.04.25

10810 공넣기

N, M = map(int, input().split())
basket = [0] * N

for a in range(M):   # 몇 번 공을 넣을지에 대한 반복문. 따라서 a는 다른 문자도 사용가능.
    i, j, k = map(int, input().split()) 
    for ball in range(i, j+1):  # i번부터 j번까지의 바구니를 구간으로 설정.
        basket[ball-1] = k  # ball에서 -1을 해줘야함. 그 이유는 컴퓨터 상에서는 0번째부터 시작이기 때문.
for a in range(N):
    print(basket[a], end=' ')

10813 공 바꾸기

N, M = map(int, input().split())
basket = []

for i in range(1,N+1):
    basket.append(i)

for a in range(M):
    i, j = map(int, input().split())
    basket[i-1], basket[j-1] = basket[j-1], basket[i-1]

for i in range(N):
    print(basket[i], end = " ")

처음에 공에 대한 배열 문제를 풀 때는 리스트를 여러 개 만들어줘야하나?? 생각했는데 그게 아니었다. 문제를 잘 읽어보니 각 바구니에는 한 개의 공이 들어간다고 하였기 때문에 리스트 하나에 값을 여러개 넣어줘도 문제가 없었다는 걸 알게 되었다. 따라서 이 문제들은 그것만 생각해줬으면 쉽게 넘어갈 수 있을 것 같다.

 

5597 과제 안 내신 분..?

ll_T = []
ll = []
ll_F = []

for i in range(1, 31):
    ll_T.append(i)
    
for i in range(28):
    a = int(input())
    ll.append(a)
    
for i in range(ll):
    if i not in ll_T:
        ll_F.append(i)
    else:
        pass
    
print(min(ll_F))
print(max(ll_F))
students = [i for i in range(1,31)]

for a in range(28):
    plus = int(input())
    students.remove(plus)
    
print(min(students))
print(max(students))

5597 첫 번째 코드는 내가 이 문제를 처음 보고 푼 코드인데, 런타임 에러가 떠서 무엇이 문제인지 확인해보니 코드가 길어서 런타임 에러가 뜬 것 같다. 그래서 구글링하여 찾아보니 생각보다 쉽게 나왔다.

그래서 보니깐 나보다 쉬웠다.

나는 일단 1부터 31까지의 students list를 만들어주고 만약 여기에 제출한 학생의 이름의 명단에 빠진 번호가 있으면 그걸 또 빈 리스트에다가 저장을 하여 그 리스트의 min, max 값을 구해주는 코드를 짰는데 물론 돌아가겠지만 너무 코드가 길어진다. 따라서 밑에 있는 코드로 하면 더 편한데 그 이유는 두 번째 코드는 students list를 만들고 28명의 값들을 각각 받아 그걸 기존에 있는 students list에서 빼주고 그럼 제거되지 않고 남아있는 친구들이 과제를 제출하지 않은 친구들일테니깐 그 친구들의 min, max 값을 해주면 답이 나온다. 유연하게 사고하는 것이 중요한 것 같다. 

 

3052 나머지

num_list = []

for i in range(10):
    num = int(input())
    remain = num % 42 
    if remain in num_list:
        pass
    else:
        num_list.append(remain)
print(len(num_list))

10811 바구니 뒤집기 (reverse 사용)

N, M = map(int, input().split())
basket = [i for i in range(1, N+1)]

for a in range(M):
    i, j = map(int, input().split())
    ll = basket[i-1:j]
    ll.reverse()
    basket[i-1:j] = ll
    
for i in range(N):
    print(basket[i], end = " ")

1564 평균

N = int(input())
score = list(map(int, input().split()))
modify = []

for i in range(N):
    modify_score = score[i]/max(score)*100
    modify.append(modify_score)

print(float(sum(modify)/len(modify)))

'알고리즘' 카테고리의 다른 글

RGB to HEX  (1) 2024.01.15
백준 파이썬 - 문자열 1  (1) 2023.11.21
백준 파이썬 - 배열  (0) 2023.09.16
백준 파이썬 - 2525  (0) 2023.07.06
백준 파이썬 - 1330, 9498, 2753, 14681, 2884  (0) 2023.07.05

10807

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

print(N_list.count(v)) # count라는 함수를 통해서 구하고 싶은 숫자의 개수를 알 수 있음.

10871

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

A = list(map(int, input().split()))

for i in A:
    if i < X:
        print(i, end=" ")
    else:
        pass

10818

N = int(input())
N_list = list(map(int, input().split()))
print(min(N_list), max(N_list))

2562

ll = []
for i in range(9):
    i = int(input())
    ll.append(i)
print(max(ll))
print(ll.index(max(ll))+1)

개인적으로 2562번에서 많이 막혀서 설명을 적겠다.

일단 첫째 줄에 비어있는 리스트를 만들어 준 이유는 반복문을 통해서 빈 리스트에다가 내가 원하는 값을

입력하기 위해서 넣어준 것이다. 그래서 그 넣어주는 함수가 append여서 ll.append(i)라고 입력해준 것이다. 

'알고리즘' 카테고리의 다른 글

백준 파이썬 - 문자열 1  (1) 2023.11.21
백준 파이썬 - 배열 2  (2) 2023.10.03
백준 파이썬 - 2525  (0) 2023.07.06
백준 파이썬 - 1330, 9498, 2753, 14681, 2884  (0) 2023.07.05
백준 파이썬 - 10430, 2588, 10171, 10172  (0) 2023.06.09

이 문제 솔직하게 말하면 11번 틀리고 처음부터 다시 알고리즘 세워보자. 해서 차근차근히 하니깐 푼 문제라서

따로 다루겠다.

 

일단 내가 그 전에 했던 알고리즘들을 보면 왜 안 되는지 보도록 하겠다.

A, B = map(int, input().split())
C = int(input())

if B+C < 60:
    B = B+C
    
elif B+C >= 60:
    plus_A = (B+C) // 60
    plus_B = (B+C) % 60
    A += plus_A
    
    if A >= 24:
        A = abs(24-A)
        B = plus_B

    else:
        if (B+C) % 60 == 0:
            B = 0
print("{} {}".format(A,B))

자자 여기서 보면 첫째 줄에 map을 통해서 잘 변수를 설정해줬고 두 번째 줄에도 변수를 잘 설정해주었다. 

그런데 문제는 if 절부터 시작이었는데 여기까지도 괜찮았는데 elif 절부터 약간 꼬이기 시작했다.

elif  - if 를 보면 abs(24-A)가 잘못된 거 같다. 솔직히 백준의 예제를 입력하고 출력하면 잘 나왔는데 이건 A가 24~48까지 있을 거라고 생각한 나의 착각이었고 A는 24, 47, 80 뭐든지 가능한데 24-A 절댓값을 하면 안 나오는게 당연하다.

그래서 고친 결과는! 

H, M = map(int, input().split())
T = int(input())

correct_M = M + T

if correct_M >= 60:
    M = correct_M % 60
    H += correct_M // 60
    
    if H >= 24:
        H = H % 24

else:
    M = M + T
print(H, M)

이거다.

절댓값 부분을 나머지를 구하는 부분으로 바꾸고 쓸데없이 코딩한 부분은 없애고 하니 이렇게 깔끔하게 나왔다.

 

인터넷의 도움을 받지 않고 혼자 풀어서 기분이 굉장히 좋은 상태이다.

오늘 잘 잘 것 같다. 흠흠

1330

문제의 입력에서 첫째 줄에 A와 B가 주어진다고 했는데 A와 B는 공백 한 칸으로 구분되어져 있다고 했으니 split() 을 생각하고 map을 통해 엮어 준다고 생각하면 좋을 것 같다. 따라서 코드는 

a, b = map(int, input().split())

if a > b:
    print('>')
   
elif a == b:
    print('==')
    
elif a < b:
    print('<')

 

9498

간단한 문제이다.

x = int(input())

if 90 <= x <= 100:
    print("A")
   
elif 80 <= x <= 89:
    print("B")
    
elif 70 <= x <= 79:
    print("C")

elif 60 <= x <= 69:
    print("D")

else:
    print("F")

 

2753

윤년을 구하는 문제인데 이것도 9498 문제랑 비슷한 문제이다.

x = int(input())

if x % 4 == 0 and x % 100 != 0:
    print('1')
    
elif x % 400 == 0:
    print('1')

else:
    print('0')

 

14681

사분면 고르기 문제이다. 어려워 보일 수 있으나 앞에 문제를 풀어냈으면 충분히 풀 수 있는 것 같다. 

입력에서 첫째 줄, 둘째 줄을 나누었기 때문에 map을 사용하지 않고 x로 한 줄 y로 한 줄 잡아서 풀어나가면 된다.

x = int(input())
y = int(input())

if x > 0 and y > 0:
    print(1)
    
elif x < 0 and y > 0:
    print(2)
    
elif x < 0 and y < 0:
    print(3)
    
elif x > 0 and y < 0:
    print(4)

 

2884

알람시계 문제인데 어려워 하지 말고 차근차근히 풀면 풀 수 있다.

일단은 입력에서 첫째 줄에 변수를 두 개 할당해라고 하였기 때문에 map을 사용해주면 되는데

입력과 같은 형태로 출력된다고 하였다. 따라서 변수를 계속 사용해 주면 되는데 다음과 같다. 

H, M = map(int, input().split())   # map을 통해서 첫째 줄에 변수 할당

if M >= 45:     
    M -= 45    # 변수 그대로 사용
else:
    M = 60 + M - 45
    if H >= 1:
        H -= 1    # 변수 그대로 사용
    else:
        H = 23
    
print(H,M)

 

'알고리즘' 카테고리의 다른 글

백준 파이썬 - 배열 2  (2) 2023.10.03
백준 파이썬 - 배열  (0) 2023.09.16
백준 파이썬 - 2525  (0) 2023.07.06
백준 파이썬 - 10430, 2588, 10171, 10172  (0) 2023.06.09
파이썬 - 입출력과 사칙연산(10869)  (0) 2023.02.18

10430

예제 입력에서 보면 5 8 4 로 한 줄에 변수가 다 적혀있어서 

a = int(input())
b = int(input())
c = int(input())

이렇게 하면 안된다.

 

그럼 어떻게 해야하나

a, b, c = map(int, input().split())

이렇게 해야한다. 

여기서 input().split()로 list가 만들어지는데, map은 이 만들어진 list의 요소를 int(정수)로 바꾼다는 거다. 

그러면 한 줄로 각 변수에 정수값이 할당된다. 

 

그래서 정답은

a, b, c = map(int, input().split())   

print((a+b)%c)
print(((a%c)+(b%c))%c)
print((a*b)%c)
print(((a%c)*(b%c))%c)

 

2588

예제 입력에서 보면 472 \n 385 두 줄로 변수가 적혀있다. 

그럼 그냥 

a = int(input())
b = input()

이렇게 하면 된다.

근데 a는 정수형으로 하고 b는 왜 이렇게 했냐면 

문제에서 보면 초등학교 때 배웠던 (세 자리 수) × (세 자리 수)로 계산하라고 되어 있기 때문에

472 * 5 , 472 * 8, 472 * 3 이걸 따로 해줘야 한다.

그래서 문자열로 만들어서 인덱스를 붙여서 하나씩 가져오고 가져온 값을 정수로 바꿔주면 된다. 

a = int(input())
b = input()

print(a*int(b[2]))
print(a*int(b[1]))
print(a*int(b[0]))
print(a*int(b))

여기서 보면 

b는 문자열이다.

b = '583'으로 저장되었다. 이렇게 되면 b는 list로 생각할 수 있다.

그니깐 ['5','8','3'] 이런 식으로 할 수 있겠네 라고 생각하면 쉽다.

그래서 인덱스를 붙여서 하나씩 값을 가져와서 정수형으로 만들어주고

그 값을 a에다가 곱해주면 해결된다.

 

10171

\(역슬래시) 출력은 \\ 

'(작은따옴표) 출력은 " ' "

print("\\    /\\")
print(" )  ( ')")
print('(  /  )')
print(" \\(__)|")

 

10172

\(역슬래시) 출력은 \\

'(작은따옴표) 출력은 " ' "

"(큰따옴표) 출력은 \" 

print("|\\_/|")
print("|q p|   /}")
print("( 0 )\"\"\"\\")
print("|\"^\"`    |")
print("||_/=\\\\__|")

'알고리즘' 카테고리의 다른 글

백준 파이썬 - 배열 2  (2) 2023.10.03
백준 파이썬 - 배열  (0) 2023.09.16
백준 파이썬 - 2525  (0) 2023.07.06
백준 파이썬 - 1330, 9498, 2753, 14681, 2884  (0) 2023.07.05
파이썬 - 입출력과 사칙연산(10869)  (0) 2023.02.18

+ Recent posts