#1859. 백만 장자 프로젝트
아이디어 : 마지막날을 max_money값으로 정한뒤 뒤에서부터 거꾸로 순회하면서 탐색한다.
T = int(input())
for tc in range(1, T+1):
# 날짜 입력
n = int(input())
# 금액 입력
money_list = list(map(int,input().split()))
# 마지막일의 값을 최대값으로 설정
max_money = money_list[-1]
# 이익 변수 초기화
profit = 0
#마지막일부터 거꾸로 순회하면서 첫날까지 순회(최댓값 변경)
for i in range(n-2, -1, -1):
# 현재 매매가가 최대값보다 크면 최댓값 변경
if money_list[i] >= max_money:
max_money = money_list[i]
# 현재 매매가가 최대값보다 크지 않다면 차익을 profit 저장
else:
profit += max_money - money_list[i]
print('#{} {}'.format(tc,profit))
#1926. 간단한 369게임
입력 : 입력으로 정수 N 이 주어진다.
출력 : 1 ~ N까지의 숫자를 게임 규칙에 맞게 출력한다.
아이디어 : 숫자를 문자열로 변환하여 3,6,9 카운트
n = int(input())
for i in range(1, n+1):
# n을 문자열로 변환
num = str(i)
count = 0
for j in num:
# 3,6,9 갯수 카운트
if j in ('3','6','9'):
count += 1
if count > 0:
print('-' * count, end=' ')
else:
print(num, end=' ')
#2007. 패턴 마디의 길이
패턴에서 반복되는 부분을 마디라고 부른다. 문자열을 입력 받아 마디의 길이를 출력하는 프로그램을 작성하라.
제약 사항 : 각 문자열의 길이는 30이다. 마디의 최대 길이는 10이다.
아이디어 : 마디의 최대 길이가 10이므로 for문으로 문자열을 하나하나 탐색한다.
예를 들어 1~5번까지 문자열과 6~10(=5*2)번까지의 문자열이 같은지 탐색
T = int(input())
for tc in range(1, T+1):
#알파벳 입력받기
num = list(map(str, input()))
#1번째 문자열부터 중복되는 문자열이 있는지 확인
for i in range(1,11):
if num[:i] == num[i:2*i]:
print('#{} {}'.format(tc, i))
break
#2005 : 파스칼의 삼각형
제약 사항 : 파스칼의 삼각형의 크기 N은 1 이상 10 이하의 정수이다. (1 ≤ N ≤ 10)
입력 : 가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스에는 N이 주어진다.
출력 : 각 줄은 '#t'로 시작하고, 다음 줄부터 파스칼의 삼각형을 출력한다.
삼각형 각 줄의 처음 숫자가 나오기 전까지의 빈 칸은 생략하고 숫자들 사이에는 한 칸의 빈칸을 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
T = int(input())
for tc in range(1,T+1):
# 각 테스트 케이스의 N 입력
N = int(input())
# 테스트 케이스 번호 출력
print('#{}'.format(tc))
answer= [] # 리스트 초기화
for i in range(N):
temp = []
for j in range(i+1):
if j == 0 or j == i: # 각 행의 첫 번째와 마지막 요소는 항상 1
temp.append(1)
else: #내부 요소는 윗줄의 왼쪽과 오른쪽 요소의 합
temp.append(answer[i-1][j] + answer[i-1][j-1])
# 현재 행을 삼각형에 추가
answer.append(temp)
#파스칼의 삼각형 출력
for i in answer:
print(*i)
#2001 : 파리 퇴치
입력 : 가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스의 첫 번째 줄에 N 과 M 이 주어지고,
다음 N 줄에 걸쳐 N x N 배열이 주어진다.
출력 : 출력의 각 줄은 '#t'로 시작하고, 공백을 한 칸 둔 다음 정답을 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
T = int(input())
for tc in range(1, T+1):
n,m = map(int, input().split())
# n * n 크기의 배열을 입력받아 grid에 저장
grid = [list(map(int, input().split())) for i in range(n)]
max_flies = 0
# m*m 크기의 파리채로 잡을 수 있는 최대 파리 수 계산
for i in range(n - m +1): #파리채가 위치할 수 있는 시작 행 인덱스 범위
for j in range(n - m + 1): # 파리채가 위치할 수 있는 열 인덱스 범위
current_flies = 0
for x in range(m): # 파리채의 행 인덱스 범위
for y in range(m): # 파리채의 열 인덱스 범위
current_flies += grid[i + x][j + y] #파리채 내의 각 위치에 있는 파리 수 합산
if current_flies > max_flies:
max_flies = current_flies
# 각 테스트 케이스의 결과를 출력
print('#{} {}'.format(tc, max_flies))
#1989. 초심자의 회문 검사
"level" 과 같이 거꾸로 읽어도 제대로 읽은 것과 같은 문장이나 낱말을 회문(回文, palindrome)이라 한다.
단어를 입력 받아 회문이면 1을 출력하고, 아니라면 0을 출력하는 프로그램을 작성하라.
T = int(input())
for tc in range(1, T+1):
word = input()
if word == word[::-1]:
print('#{} {}'.format(tc,1))
else:
print('#{} {}'.format(tc,0))
#1986. 지그재그 숫자
1부터 N까지의 숫자에서 홀수는 더하고 짝수는 뺐을 때 최종 누적된 값을 구해보자.
T = int(input())
for tc in range(1, T+1):
N = int(input())
result = 0
for i in range(1, N + 1):
if i % 2 == 0:
result -= i
else:
result += i
print('#{} {}'.format(tc, result))
#1984. 중간 평균값 구하기
10개의 수를 입력 받아, 최대 수와 최소 수를 제외한 나머지의 평균값을 출력하는 프로그램을 작성하라.
(소수점 첫째 자리에서 반올림한 정수를 출력한다.)
T = int(input())
for tc in range(1, T+1):
num = list(map(int, input().split()))
num.sort()
number = num[1:-1]
'''
혹은
num.remove(num[0])
num.remove(num[-1])
'''
avg = sum(number) / len(number)
print('#{} {}'.format(tc, round(avg)))
# 1983.조교의 성적 매기기
아이디어 : K번째 학생의 점수를 계산하고, 점수를 가진 인덱스 번호 찾는다.
N/10명의 학생이 동일한 평점을 부여할 수 있으므로, (예를 들어 20명인 경우 2명씩 같은 점수를 부여하므로) 반드시 인덱스 번호를 찾을 때 n // 10으로 나눠준다.
T = int(input()) # 테스트 케이스의 개수
grades = ['A+', 'A0', 'A-', 'B+', 'B0', 'B-', 'C+', 'C0', 'C-', 'D0']
for tc in range(1, T + 1):
N, K = map(int, input().split()) # 학생 수와 학점을 알고 싶은 학생의 번호 입력받기
student_list = [] # 각 학생의 총점을 저장할 리스트 초기화
# 각 학생의 총점 계산하여 리스트에 저장
for _ in range(N):
scores = list(map(int, input().split())) # 중간, 기말, 과제 점수 입력받기
total_score = 35 * scores[0] + 45 * scores[1] + 20 * scores[2] # 총점 계산
student_list.append(total_score)
# K번 학생의 점수 저장
k_student = student_list[K-1]
# 내림차순 정렬
student_list.sort(reverse=True)
div = N//10 # 동일한 평점
# K번 학생의 점수를 가진 인덱스 번호 찾기
final_k_score = student_list.index(k_student) // div
print('#{} {}'.format(tc, grades[final_k_score]))
'Study with Yedol > 코딩테스트 준비' 카테고리의 다른 글
[python3] SWEA D2 문제풀이 | 1976. 시각 덧셈 외 7문제 (0) | 2024.05.18 |
---|---|
[Python3] 백준 기본 문제 풀기 | 백준 14916 : 거스름돈 (0) | 2024.05.17 |
이코테 강의 몰아보기 | 7. 다이나믹 프로그래밍 (0) | 2024.05.13 |
이코테 강의 몰아보기 | 6. 다이나믹 프로그래밍 (0) | 2024.05.08 |
이코테 강의 몰아보기 | 5. 이진 탐색 (0) | 2024.05.07 |