목록Algorithm (26)
minzzl
문제 https://www.acmicpc.net/problem/10814 풀이 문제를 보자마자 들었던 생각은 .. 아 딕셔너리로 풀어야겠다! 였습니다. 그러나 .. 생각치 못했던 복병이... 있었습니다.. 딕셔너리 자료구조의 경우 key 값의 중복이 있을 경우 value 값이 새로 들어온 값으로 덮어씌여져 버립니다.. 그래서 나이를 key값으로 두든, 이름을 key 값으로 두든 중복이 발생할 경우 다른 입력임에도 불구하고 .. 덮어쓰여져 버려 계속 문제를 틀려버리는 것이었습니다 .. 거두절미하고, 이를 해결하는 방법은 생각보다 간단했습니다. 그냥 입력 받는 key 값을 각각의 객체로 만들어버리면 key 가 중복 되더라도 새롭게 딕셔너리에 값을 할당할 수 있습니다! 코드 import sys class pe..
단순히 몇줄을 입력받는 경우에는 input() 을 사용하면 됩니다. 그러나 연속적으로 여러줄을 입력을 받아야하는 경우는 다릅니다. 시간 초과가 발생할 수 있기 때문입니다. 따라서 최대한 빠르게 입력을 받아야만 합니다. 그 때 사용하는 것이 sys 라이브러리에 정의되어있는 sys.stdin.readline() 입니다. 사실 기존에는 input() 만으로 문제를 푸는데 딱히 지장이 없었습니다만, 백준의 2751 문제를 접한 후 빠른 입력을 통해 시간 초과 문제를 해결해야만 했습니다.. sys.stdin.readline() 사용법 input()보다는 sys.stdin.readline()를 사용하면 더 빠른 입력이 가능합니다. 아래의 다양한 예제들로 익혀봅시다. 한 개의 정수를 입력 받는 경우 import sy..
문제 https://www.acmicpc.net/problem/1018 풀이 이는 Brute force로 단순 구현 문제이다. 문제를 보면 체스판을 색칠하는 경우는 단 두가지라는 것을 알수 있다, 즉 처음 2차원 배열 arr[8][8]에서 [0][0]이 흰색인 경우와 검은색인 경우이다. 따라서 입력에 따라 한칸씩 이동하며 맨처음이 흰색으로 시작해 체스판을 이룬 배열과 검은색으로 시작해 체스판을 이룬 배열을 각각 비교하며 최소가 되는 경우를 확인하였다. 이를 그림으로 나타내면 다음과 같다. 입력받은 2차원 배열의 각 셀마다를 행방향으로 a-8+1 까지, 열 방향으로 b-8+1 까지 옮겨가며 비교한다. 이를 코드로 나타내면 다음과 같다. a , b = input().split() a = int(a) b = ..
문제 https://www.acmicpc.net/problem/1085 풀이 가장 처음 문제를 읽었을 때는 단순히 점과 점 사이의 거리를 구하는 문제일줄로만 알았습니다. 그러나 직사각형의 경계선까지의 최단거리였기 때문에 이와는 완전히 다른 문제입니다. 그림으로 나타내면 다음과 같습니다. 즉 4개의 수의 크기를 비교해야합니다. 이를 위해 각 수를 배열에 넣어 정렬 한 다음 가장 첫번째 인덱스의 값을 출력하도록 하였습니다. 코드 x, y, w, h = input().split() x = int(x) y = int(y) w = int(w) h = int(h) a = w - x b = h - y arr = [] arr.append(a) arr.append(b) arr.append(x) arr.append(y) ..
문제 https://www.acmicpc.net/problem/10250 10250번: ACM 호텔 프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수 www.acmicpc.net 풀이 우선 조건을 보면 거리가 같을 때에는 아래층 방을 선호한다는 것이 적혀있다. 이는 거리가 짧다면 윗층을 선택할 수도 있다는 것인데, 즉 N번째 손님의 방 호수를 결정하기 위해서는 아래층에서 윗층으로 쌓아가듯이 순서대로 진행하면 된다는 것이다. 그림으로 나타낸다면 다음과 같다. 그런데 다음과 같이 진행하다보면 규칙이 눈에 보인다. H(입력된 층수)는 N의 크기에 따라 층수는 ..
이 글에서는 선택 정렬과 마찬가지로 몹시 직관적인 버블 정렬(Bubble Sort)에 대해서 알아보겠습니다. 버블 정렬(Bubble Sort) 서로 인접한 두 원소를 검사하여 정렬하는 알고리즘. 1 10 5 8 7 6 4 3 2 9 1 10 5 8 7 6 4 3 2 9 1 5 10 8 7 6 4 3 2 9 1 5 8 10 7 6 4 3 2 9 1 5 8 7 10 6 4 3 2 9 1 5 8 7 6 10 4 3 2 9 1 5 8 7 6 4 10 3 2 9 1 5 8 7 6 4 3 10 2 9 1 5 8 7 6 4 3 2 10 9 1 5 8 7 6 4 3 2 9 10 ... 위와 같은 방식으로 1차 버블 정렬을 끝나면 가장 큰 수가 가장 뒤로 가게됩니다. 즉 가장 큰 수의 정렬이 확정되고, 이후 이를 제외한..