목록코팅테스트/백준 문제 모음 (296)
For Programmer
https://www.acmicpc.net/problem/22988 22988번: 재활용 캠페인 첫 번째 용기와 두 번째 용기를 가져가서 용량이 $\left(0+1+\frac{13}{2}\right)$㎖ $=$ $7.5$㎖ 남은 용기를, 세 번째 용기와 네 번째 용기를 가져가서 용량이 $\left(2+3+\frac{13}{2}\right)$㎖ $=$ $11.5$㎖ 남은 용 www.acmicpc.net 이 문제는 문제의 풀이 해답을 잘 찾아야 한다. 우선 이미 X인 병은 제외시키고 해당 개수만큼 추가해준다. 그 후 2개를 들고가면 X / 2 만큼 절반을 주기 때문에 나머지 2병이 X / 2 보다 크거나 같은 2병을 찾는데 2중 반복문으로 찾으면 시간초과가 발생한다. 따라서 투 포인터로 찾을 수 있어야 하며..
N의 값이 1000000 이라 이중 반복문은 돌지 못한다. 즉, 한번의 반복안에 값을 찾아야하는데 이는 투포인터로 풀 수 있다. 투포인터는 크게 두 종류 # 1. 특정 조건을 만족하는 연속 부분 수열을 찾는다. # s = 0, e = 0 출발 # 반복조건: e < n # 같이 뒤로 간다. # 2. 특정 조건을 만족하는 두 개의 수를 찾는다. # s = 0, e = n - 1 출발 # 반복조건: s < e # 서로에게 다가간다. 로 나눌 수 있다. 위 문제는 2번째 탬플릿을 적용하면 된다. n = int(input()) array = list(map(int, input().split())) x = int(input()) array.sort() #정렬해준다!!. s = 0 # 시작 포인터 e = n - 1 ..
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWczm7QaACgDFAWn SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 이 문제는 처음에 약간 고민했다. P를 입력받고 버스 정류장의 정보를 P만큼 입력받는데 중복된다는 말이 없어서 고민했으나 역시나 틀리자말자 중복을 허용하니 맞았다. 처음에는 딕셔너리로 풀 생각을 못했는데 중복을 허용해야하기 때문에 딕셔너리로 풀었더니 쉽게 풀렸다. 딕셔너리 키에는 해당 정류소의 정보를 Value에는 지나가는 횟수를 저장하는 식으로 하였다. import sys # sys.stdin =..
이 문제는 전형적인 투포인터 문제이다. 투포인터로 풀지 않으면 파이썬으로는 시간초과 발생한다. 그나마 파이파이3로 제출하니 시간초과는 발생하지 않았는데 이 기회에 투포인터도 공부할 수 있었다. 2가지 코드 모두 공유하겠다. 1. 투포인터 풀이 N, M = map(int, input().split()) array = list(map(int, input().split())) + [0] # 인덱스 오류 방지를 위해 한칸 뒤에 의미없는 0값을 추가 s = 0 # 첫번째 포인터 e = 0 # 두번째 포인터 total = array[0] # 구간합을 저장할 변수 첫번째 값을 넣어 놓는다. count = 0 # 횟수를 셀 변수 while e < N: # 끝 인덱스가 N 전까지 if total == M: # 만약 구간..
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWQmA4uK8ygDFAXj# SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 정말 재미있는 문제이다. 약간 삼성 A형하고 비슷한 유형이다. 단, 문제에서 "상대편 돌'들'이 아니라 돌이라고 되어있어서 새로 놓을 내 돌과 놓여있는 내 돌 사이에 상대편 돌이 하나만 들어갈 수 있는줄 알았는데 여러 개 놓여 있어도 관계 없네요.." 라고 댓글이 되어있는걸 너무 뒤늦게 봤다........... 나도 문제를 풀면서 당연히 돌 하나만 들어가는 줄 간단하게 조건을 구현하다 계속해서 틀..
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LsaaqDzYDFAXc SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 이 문제도 간단한 구현문제이다. 단, 시간을 최대한 줄이기위해 반복문 탈출 조건을 생각해야했다. 내가 생각한 탈출 조건은 반복문을 0초 부터~ 최대 도착시간까지 돌면서 남은 사람수를 계속 계산하는 것이다. 만약 남은사람보다 이미 현재 가지고있는 붕어빵이 더 많다면 굳이 뒤에 더 검사하지 말고 바로 탈출 하는 것이었다. import sys sys.stdin = open('input.txt', 'r')..
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWQl9TIK8qoDFAXj SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 이 문제 처음에 어떻게 접근해야 할지 몰라서 계속 고민하다 결국 답을 봤다. 답은 단순히 완전탐색으로 모든 경우를 조사하는 거였다. 반복문 안의 반복문안의 반복문.... 힌트를 보아도 구현을 할 줄 몰랐는데 답을 보니 이해가 되었다. 이 문제덕분에 반복문 내 반복문 방식의 접근 방법에 대해서 더 학습할 수 있었다. T = int(input()) for order in range(1, T + 1): ..
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV18TrIqIwUCFAZN SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 대표적인 그래프 문제이자 위성정렬로 풀 수 있는 문제이다. 입력받은 간선을 그대로 이차원 리스트에 저장한 후 어떤 노드로 들어오는 간선의 개수를 저장하는 일차원 리스트를 따로 만들어 준다. 그 후 2가지 리스트를 이용하여 큐에 데이터를 집어넣으면서 그래프를 탐색해준다. import sys from collections import deque sys.stdin = open('input.txt', 'r..