목록BEAKJOON (11)
Rego의 블로그
https://www.acmicpc.net/problem/11650 11650번: 좌표 정렬하기 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 원소가 여러 개일 때, 리스트 내 리스트가 있을 때, key= 함수로 lambda 값을 정하여 원소의 순서를 정해주면 리스트 내의 리스트를 정렬하기 용이하다. import sys input = sys.stdin.readline n= int(input()) lst= [] for i in range(n): lst.append(list(map(int..
https://www.acmicpc.net/problem/10989 10989번: 수 정렬하기 3 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. www.acmicpc.net input()을 이용했더니 시간초과. 그냥 빈 리스트를 이용했더니 시간 초과가 떠서 리스트의 크기를 정해놓고, 0으로 채웠다. 정렬할 숫자 입력시 리스트[input]에 해당되는 원소에 1씩 더해주고 이후에 for 문을 또 하나 만들어서 원소가 0이 아닌 경우에만 리스트[i]의 크기만큼 i를 출력해준다. 1. n 입력 후 정렬할 원소들을 입력 ex) 1 1 1 2. 리스트[1] += 1 을 세 번 실행. 리스트[1] ..
https://www.acmicpc.net/problem/1929 1929번: 소수 구하기 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. www.acmicpc.net 브루트포스를 이용해서 풀려고 하니 시간초과를 뱉어내는 바람에 sys와 math 모두 사용하게 됐다. 소수를 찾아낼 때 제곱근을 이용하여 시간을 줄이는 과정(int(math.sqrt(num))이 존재한다. import math import sys input = sys.stdin.readline def findPrime(num): if num == 1: return False for i in range(2, int(math.sqrt..
https://www.acmicpc.net/problem/1966 1966번: 프린터 큐 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 www.acmicpc.net 문제 이해하는 데 정말 오랜 시간을 소요했다... 결국 수많은 시행착오 끝에 구글의 힘을 빌어 해결했지만, 이해한 대로 적어보자면, 1. 중요도 리스트와 중요도 리스트의 길이를 요소로 하는 인덱스 리스트를 작성한다. 2. m은 찾고자 하는 문서의 리스트 내 위치로, 중요도 리스트의 길이를 요소로 한 index[]를 만들고 index[m] = 'x'를 이용해 리스트에 x를 심어놓는다. 3. while ..
https://www.acmicpc.net/problem/11659 11659번: 구간 합 구하기 4 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j www.acmicpc.net 미리 주어진 수들을 차례로 전부 더해놓는 리스트를 만든다. i가 1이라면 j까지 전부 더하기 때문에 i == 1일 때, 누적합 리스트의 j번째 원소가 출력되게 하였고, 그 외에는 (누적합 리스트의 j번째 원소 - 누적합 리스트의 i-1번째 원소)로 정답을 출력할 수 있다. import sys input = sys.stdin.readline n,m = map(int,input..
https://www.acmicpc.net/problem/5543 5543번: 상근날드 입력은 총 다섯 줄이다. 첫째 줄에는 상덕버거, 둘째 줄에는 중덕버거, 셋째 줄에는 하덕버거의 가격이 주어진다. 넷째 줄에는 콜라의 가격, 다섯째 줄에는 사이다의 가격이 주어진다. 모든 가 www.acmicpc.net 의식의 흐름대로 리스트를 이용하여 풀었다. 쉬운 내용이니 설명은 따로 붙이지 않는다. 숏코딩을 보니 사용하지 않고 map함수를 이용하여 받는 즉시 리스트로 보내 계산하도록 만들었더라. 그저 생각나는 대로 하다보니 짧게 만들 생각은 하지 못했다. 내 코드이다. lst = [] setlst = [] for i in range(5): n = int(input()) lst.append(n) for burger ..
https://www.acmicpc.net/problem/9372 9372번: 상근이의 여행 첫 번째 줄에는 테스트 케이스의 수 T(T ≤ 100)가 주어지고, 각 테스트 케이스마다 다음과 같은 정보가 주어진다. 첫 번째 줄에는 국가의 수 N(2 ≤ N ≤ 1 000)과 비행기의 종류 M(1 ≤ M ≤ 10 000) 가 www.acmicpc.net 왕복을 하며 이미 지나왔던 나라도 다시 갈 수 있기 때문에 트리가 연결되어있다고 볼 수가 있다. 따라서 DFS까지 갈 것도 없이 n-1을 출력하면 된다. 이 문제에서 input() 함수는 시간초과를 뱉어내기 때문에 sys 모듈을 사용하였다. import sys t = int(sys.stdin.readline()) for i in range(t): n, m = ..
https://www.acmicpc.net/problem/17478 17478번: 재귀함수가 뭔가요? 평소에 질문을 잘 받아주기로 유명한 중앙대학교의 JH 교수님은 학생들로부터 재귀함수가 무엇인지에 대하여 많은 질문을 받아왔다. 매번 질문을 잘 받아주셨던 JH 교수님이지만 그는 중앙대 www.acmicpc.net 함수를 반복할 때마다 "_"가 4개씩 늘어난다. 재귀를 이용하여 표현하였다. recursive(m - 1)에 의하여 if not 문의 변수 m이 0이 될 때가 되어서야 return을 하며, 즉, n - m = 0, 1, 2,..., n. 결국 n번 돈다는 말이다. 이를 이용한 풀이는 아래의 코드와 같다. def recursive(m): print("_"*(4*(n - m)) + '"재귀함수가 뭔..
https://www.acmicpc.net/problem/2217 2217번: 로프 N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하 www.acmicpc.net 문제는 이렇다. 여러 개의 로프를 병렬로 연결하면 각각의 로프에 걸리는 중량을 나눌 수 있다. k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때, 각각의 로프에는 모두 고르게 w/k 만큼의 중량이 걸리게 된다. 모든 로프를 사용해야 할 필요는 없으며, 임의로 몇 개의 로프를 골라서 사용해도 된다. 로프를 저장할 리스트와 그를 이용해 들어올릴 수 있는 중량을 저장할 리스트를 만든다. ..
https://www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 문제를 처음에 맞닥뜨리고 무슨 말을 하는건지 이해하는 데까지 시간이 꽤 걸렸다. 결국 손으로 써보고 나서야 감을 잡았는데, 이해한 내용을 대략적으로 설명해보겠다. 주어진 수열이 가진 원소들을 오름차순을 지켜서 스택에 push해야 한다. 이후 pop을 이용해 주어진 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 ..