본문 바로가기

728x90

algorithm

[백준알고리즘] 2875번: 대회 or 인턴 -Python [백준알고리즘] 2875번: 대회 or 인턴 -Python https://www.acmicpc.net/problem/2875 2875번: 대회 or 인턴 문제 백준대학교에서는 대회에 나갈 때 2명의 여학생과 1명의 남학생이 팀을 결성해서 나가는 것이 원칙이다. (왜인지는 총장님께 여쭈어보는 것이 좋겠다.) 백준대학교는 뛰어난 인재들이 많아 올해에도 N명의 여학생과 M명의 남학생이 팀원을 찾고 있다. 그런데 올해에는 대회에 참여하려는 학생들 중 K명을 반드시 인턴쉽 프로그램에 참여하라는 학교의 방침이 생기게 되었다. 인턴쉽에 참여하는 학생은 대회에 참여하지 못한다. 백준대학교에서는 뛰어난 인재들이 많기 때문 www.acmicpc.net 이번 문제는 간단하게 풀었다. 대회 팀의 수를 t라고 했을 때 대회에 .. 더보기
[백준알고리즘] 2261번: 가장 가까운 두 점 -Python [백준알고리즘] 2261번: 가장 가까운 두 점 -Python https://www.acmicpc.net/problem/2261 2261번: 가장 가까운 두 점 첫째 줄에 자연수 n(2 ≤ n ≤ 100,000)이 주어진다. 다음 n개의 줄에는 차례로 각 점의 x, y좌표가 주어진다. 각각의 좌표는 절댓값이 10,000을 넘지 않는 정수이다. 같은 점이 여러 번 주어질 수도 있다. www.acmicpc.net 진짜 어이없는 문제다. 문제를 푼 코드가 별 차이 없어 보이는데 내 거만 왜 통과를 안 하는지... 코드는 아래 블로그의 코드를 거의 참조해서 겨우 통과했는데... 이전에 통과하지 못한 코드도 별 차이 없는데 안된다.. 게다가 내가 짠 코드는 PyPy에서만 통과를 한다. ㅡㅡ 대체 무슨 차이인지 모.. 더보기
[백준알고리즘] 1517번: 버블 소트 -Python [백준알고리즘] 1517번: 버블 소트 -Python https://www.acmicpc.net/problem/1517 1517번: 버블 소트 첫째 줄에 N(1≤N≤500,000)이 주어진다. 다음 줄에는 N개의 정수로 A[1], A[2], …, A[N]이 주어진다. 각각의 A[i]는 0≤|A[i]|≤1,000,000,000의 범위에 들어있다. www.acmicpc.net 당연히 일반적인 방법으로 문제를 해결할 경우 시간 초과가 발생할 것이란 것을 알고 있었다. 그런데 그거 외에는 방법을 모르겠어서.. 각각의 값마다 앞의 인덱스에서 자신보다 큰 값의 개수를 새는 것까지는 생각했는데 결국 O(N^2)을 벗어날 수 없었다. # 여기서 앞에 존재하는 큰 값의 개수를 세는, 역순으로 존재하는 수의 개수를 찾는 .. 더보기
[백준알고리즘] 2448번: 별 찍기 - 11 -Python [백준알고리즘] 2448번: 별 찍기 - 11 -Python https://www.acmicpc.net/problem/2448 2448번: 별 찍기 - 11 첫째 줄에 N이 주어진다. N은 항상 3×2k 수이다. (3, 6, 12, 24, 48, ...) (k ≤ 10) www.acmicpc.net 와;; 난해했다.. 사실 코드는 그럭저럭 바로 짜기 시작했었는데 이것저것 걸리는 것들이 많았다.. 우선 출력시 *의 끝부분까지만 출력하는 것이 아니라 * 뒤에도 빈 공간을 출력해주어야 했다. 그리고 초기 테이블에 이상한 값이 끼었었는지 똑같은 코드인데도 계속 100퍼센트에서 틀리길래 table 생성 부분만 조금 손봤더니 정상적으로 통과했다. 나는 분할정복 개념으로 문제를 풀었다. 큰 삼각형에서 작은 서브 삼각.. 더보기
[백준알고리즘] 2447번: 별 찍기 10 -Python [백준알고리즘] 2447번: 별 찍기 10 -Python https://www.acmicpc.net/problem/2447 2447번: 별 찍기 - 10 첫째 줄에 N이 주어진다. N은 항상 3의 제곱꼴인 수이다. (3, 9, 27, ...) (N=3k, 1 ≤ k < 8) www.acmicpc.net 모든 공간을 *로 채워준 다음에 지워야 할 부분들을 지워주었다. 각 상태에서 9개의 구역을 나눠 가운데에 위치한 구역은 모두 빈칸 ' '을 만들어주어야 한다. 그리고 나눠진 작은 구역들도 반복해서 수행해준다. 아래에 새롭게 푼 코드를 추가했는데 재귀를 사용해서 더 깔끔하게 풀었다. def rm(i, j, size): if size == 1: return new_size = size//3 for ri in .. 더보기
[백준알고리즘] 11729번: 하노이 탑 이동 순서 -Python [백준알고리즘] 11729번: 하노이 탑 이동 순서 -Python https://www.acmicpc.net/problem/11729 11729번: 하노이 탑 이동 순서 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 옮기려 한다. 한 번에 한 개의 원판만을 다른 탑으로 옮길 수 있다. 쌓아 놓은 원판은 항상 위의 것이 아래의 것보다 작아야 한다. 이 작업을 수행하는데 필요한 이동 순서를 출력하는 프로그램을 작성하라. 단, 이동 횟수는 최소가 되어야 한다. 아래 그림은 원판이 5 www.acmicpc.net 오랜만에 하노이탑 문제를 푼 것 같다. 분할 정복 문제.. 더보기
[백준알고리즘] 11728번: 배열 합치기 -Python [백준알고리즘] 11728번: 배열 합치기 -Python https://www.acmicpc.net/problem/11728 11728번: 배열 합치기 첫째 줄에 배열 A의 크기 N, 배열 B의 크기 M이 주어진다. (1 ≤ N, M ≤ 1,000,000) 둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 배열에 들어있는 수는 절댓값이 109보다 작거나 같은 정수이다. www.acmicpc.net 그냥 서로 다른 두 배열을 정렬된 상태로 출력하는 문제이다. 아래처럼도 풀어봤고, 각각 정렬된 두 배열에서 작은 값부터 하나씩 비교해서 결과를 출력하는 코드도 작성했으나 아래의 코드가 조금 더 빨랐고 간단해 보여서 그냥 잔뜩 파이썬스러운 코드만 올렸다. 1 2 3 4 5 6 import .. 더보기
[백준알고리즘] 10815번: 숫자 카드 -Python [백준알고리즘] 10815번: 숫자 카드 -Python https://www.acmicpc.net/problem/10815 10815번: 숫자 카드 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이가 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다. 두 숫자 카드에 같은 수가 적혀있는 경우는 없다. 셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 상근이가 가지고 있는 숫자 카드인지 아닌지를 구해야 할 M개의 정수가 주어지며, 이 www.acmicpc.net 처음에 주어진 수들이 존재하고, 다음에 주어지는 값들이 여기에 존재하는지 판.. 더보기

728x90