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

1. 

print('Hello World!')

 

2. 3. 4. (비슷한 형식의 문제)

문제 : 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성

입력 : 첫째 줄에 A와 B가 주어진다.(0<A, B<10)

출력 : 첫째 줄에 A+B를 출력한다.

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

 

map : 원본 리스트를 변경하지 않고 새 리스트를 생성

 

a = [1.2, 2.5, 3.7, 4.6]
a = list(map(int, a))
a
[1, 2, 3, 4]

a라는 리스트가 int를 만나서 정수가 되고 map을 통해 새 리스트를 작성

그니깐 1.2 -> 1 / 2.5 -> 2 / 3.7 -> 3 / 4.6 -> 4 

이렇게 바뀐 거를 리스트로 형성하는 거임.

 

a, b = input().split()
print(int(a)+int(b))

 

input().split() 의 결과는 문자열 리스트

이렇게 하면 한 줄에 숫자 2개를 쓰더라도 split() 이라는 함수를 통해서 

2개로 쪼개는 거 가능함. 

 

참고: split(seq=none, maxsplit)  # seq는 구분자 , maxsplit은 얼마나 나눌건지

'1,2,3,4'.split(',', maxsplit=3)

이 결과가 문자열 취급되어 '1', '2', '3', '4' 이런 식으로 나온다.

maxsplit 을  통해서 삼등분 해주는 것.

 

5. 

문제 : 두 자연수 A와 B가 주어진다. 이때, A+B, A-B, A*B, A/B(몫), A%B(나머지)를 출력하는 프로그램을 작성하시오. 

입력 : 두 자연수 A와 B가 주어진다. (1 ≤ A, B ≤ 10,000)

출력 : 첫째 줄에 A+B, 둘째 줄에 A-B, 셋째 줄에 A*B, 넷째 줄에 A/B, 다섯째 줄에 A%B를 출력한다.

 

기존에 했던 대로 하면 되는데

몫은 // 이니깐 이것만 주의하면 됨. 

print를 자주 써서 식이 길어지기는 함. 이게 단점임.

a, b = map(int, input().split())
print(a+b)
print(a-b)
print(a*b)
print(a//b)
print(a%b)

 

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

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

+ Recent posts