목록Python (281)
jyamethyst21 님의 블로그
문제: 테스트케이스 입력 개수만큼 반복문을 돌면서 학점과 평점을 계산하면 되는 문제이다.여기서 학점은 전부 더하고, 평점은 학점*성적으로 구한 다음 이를 총 학점으로 나눠야하는 방식이다. 풀이:T = int(input())for _ in range(T): N = int(input()) total_credit = 0 total_score = 0.0 for _ in range(N): C, G = map(float, input().split()) total_credit += C total_score += C * G GPA = total_score / total_credit print(int(total_credit), f"{GPA:.1f}")..
문제: 첫째 줄에 문자열의 길이와 문자열 개수를 입력받고, 두번째 줄부터 모든 문자열을 입력받는다.그리고 마지막 줄에 뽑을 문자열의 개수를 입력받는다. 위의 예제로 설명하자면 마지막 줄은 2이다. 이는 문자열 전체를 두 자리씩 잘랐을 때의 모든 경우의 수를 계산해서 어떤 문자 2개를 뽑았을 때 가장 높은 점수를 받을 수 있는지 파악한 뒤 해당 문자열을 기준으로 점수를 계산하면 되는 문제이다. 풀이:L, N = map(int,input().split())li = []for i in range(N): li.append(input())K = int(input())new_li = set()for j in li: for q in range(L-K+1): new_li.add(j[q:q+K])..
문제: A의 개수와 K의 수를 첫째줄에 입력받고, 둘째 줄에 A를 전부 입력받을 때 해당 수를 오름차순으로 정렬한 다음 K에 해당하는 값을 출력하면 되는 문제이다. 풀이:N, K = map(int,input().split())A = list(map(int,input().split()))new_A = sorted(A, reverse=False)print(new_A[K-1])필자는 sorted 함수를 사용해서 new_A에 A를 오름차순한 값을 새로 정의하였다. reverse 파라미터를 False로 하면 오름차순, True면 내림차순으로 정렬한다. (디폴트값은 오름차순)그 다음 K의 수에 해당하는 값을 출력하면 되는데 주의할 점은 1을 빼주어야 한다는 점이다. 파이썬에서 인덱스는 0부터 시작하기 때문에 이를 ..
문제: 문자열 A와 대문자를 소문자로 치환해야 하는 목록 B가 주어질 때, 이를 적용한 문자열 C를 출력하면 되는 문제이다. 풀이:A = input()B = list(map(str,input().split()))for i in A: if i in B: A = A.replace(i, i.lower())print(A)A, B 변수에 조건에 맞게 입력받은 뒤, 반복문과 조건문을 통해 각 글자를 비교한다.문자열 하나씩 떼서 이게 목록 B에 해당하는 문자열이라면 replace 함수를 활용해서 해당 문자를 해당 문자의 소문자로 변환하는 코드를 짜면 된다. 여기서 주의할 점은 새로운 변수에 저장하는 게 아니라 A에 그대로 저장해야 한다는 점이다.replace 함수는 '.' 앞에 있는 문자열을 기준으..
문제: 네 명의 스킬 레벨이 주어졌을 때, 두 팀의 스킬 차이를 최소화로 만들 수 있도록 팀을 만든 다음 실제 차이가 어느 정도인지 출력하는 문제이다. 풀이:li = []A, B, C, D = map(int,input().split())li.append(A)li.append(B)li.append(C)li.append(D)li2 = sorted(li)ill = li2[0] + li2[-1]ggol = li2[1] + li2[2]print(abs(ill-ggol))A, B, C, D를 입력받고 li라는 리스트에 추가한다.그 다음 오름차순으로 정렬한 다음 가장 큰 수와 가장 작은 수를 더해서 ill에, 그리고 나머지 두 개의 합은 ggol이라는 변수에 더하여 넣는다. 이렇게 하는 이유는 가장 큰 수+가장 작은..
문제: 두 마리의 치킨 가격이 두 개의 통장잔고보다 크면 통장 잔고의 합계를, 그렇지 않다면 치킨 두 마리를 구매 후에 남는 통장 잔고의 합을 출력하면 되는 문제이다. 풀이:A, B = map(int,input().split())C = int(input())if 2*C > A+B: print(A+B)elif 2*C 두 마리의 치킨과 두 개의 통장 잔고의 합을 비교해서 전자가 더 크다면 통장 잔고의 합계를 출력하고, 그렇지 않다면(통장 잔고의 합이 두 마리의 치킨 가격와 같거나 크다면) 치킨 두 마리 구매 후 남은 통장 잔고의 합계를 출력하면 된다.
문제: K, A, D를 입력받고 위 수식을 계산했을 때, 각각 결과에 따라 해당하는 문구를 출력하면 되는 문제이다. 풀이:K, D, A = map(int,input().split('/'))if (K+A해당 문제에서 딱히 어려운 것은 없다. 세 수를 입력받고, 이를 상기 식 그대로 따라서 써서 조건을 검사하면 되기 때문이다.조건에 맞는 경우를 각각 프린트하면 되는데 이 문제에서 핵심은 split('/')이지 않을까 싶다.대부분 백준 문제는 공백을 사이에 두고 입력받기 때문에 split() 으로 뒀을 것이다. spit()은 기본값 자체가 공백이기 때문에 () 안에 아무것도 넣지 않아도 자동으로 공백으로 인식하게 된다.하지만 이번 문제는 '/'으로 구분하기 때문에 위와 같이 코드를 작성하면 문제를 풀 수 있다!
문제: END라고 주어지기 전까지 입력받은 문장을 거꾸로 배치해서 출력하는 문제이다. 풀이:while True: password = input() if password == 'END': break print(''.join(reversed(password)))while문을 활용해서 무한반복하도록 하고, password에 문장을 입력받는다.이후 password가 END라면 무한반복을 탈출, 그렇지 않으면 입력받은 문장을 reversed 함수를 활용하여 뒤집은 다음 출력한다.여기서 join을 사용하지 않으면 password가 각각의 인자로 구분되어 아래와 같이 출력된다. 예시)입력값: abc출력:cba 그렇기 때문에 한줄씩 띄워지는 각 인자를 붙이기 위해 필자는 join 함수를 사..
문제: 총 네 번의 이동 시간을 입력받고 이를 전부 더한 다음에 분, 초 단위로 나눠서 두 줄의 걸쳐 출력해주면 되는 문제이다.문제에 나와있는 것처럼 전부 초 단위이기 때문에 구분 없이 하나로 더한 다음 계산해주면 된다. 풀이:total = 0for i in range(4): t = int(input()) total += tprint(total//60)print(total%60)초를 전부 더해서 저장할 변수 total을 0으로 초기화하고 반복문을 통해 네 번의 이동시간(초 단위)을 입력받는다.그 후 입력받은 이동시간을 전부 total에 더하여 총 시간(초)을 구한다.해당 문제는 입력받은 총 시간(초)을 분과 초로 나누는 문제이므로 초에서 분을 계산하기 위해 60을 나눈 몫을 첫 번째 줄에(분 ..
문제: 읽다보면 헷갈릴 수도 있는데 입력받은 문자열의 순서에 맞게 최초로 입력받았던 A, B, C를 다시 정렬해서 출력하는 문제이다.만약 1 5 10 이런식으로 처음 입력받고, 두번째 줄에 ACB 이렇게 입력받을 때 ACB는 현재 '가장 작음-가장 큼-중간 값'이므 입력받았기 때문에 1 10 5가 출력될 것이다.첫 번째 줄에 입력받은 수를 그냥 단순히 1,2,3 이런식으로 순서대로 보면 좀 이해가 될 것이다. 풀이:nums = list(map(int, input().split()))string = input()nums.sort()for c in string: if c == 'A': print(nums[0], end=' ') elif c == 'B': print(nums..
