문제 ACM 호텔 매니저 지우는 손님이 도착하는 대로 빈 방을 배정하고 있다. 고객 설문조사에 따르면 손님들은 호텔 정문으로부터 걸어서 가장 짧은 거리에 있는 방을 선호한다고 한다. 여러분은 지우를 도와줄 프로그램을 작성하고자 한다. 즉 설문조사 결과 대로 호텔 정문으로부터 걷는 거리가 가장 짧도록 방을 배정하는 프로그램을 작성하고자 한다. 문제를 단순화하기 위해서 호텔은 직사각형 모양이라고 가정하자. 각 층에 W 개의 방이 있는 H 층 건물이라고 가정하자 (1 ≤ H, W ≤ 99). 그리고 엘리베이터는 가장 왼쪽에 있다고 가정하자(그림 1 참고). 이런 형태의 호텔을 H × W 형태 호텔이라고 부른다. 호텔 정문은 일층 엘리베이터 바로 앞에 있는데, 정문에서 엘리베이터까지의 거리는 무시한다. 또 모든..
으로 구현한 다른 정렬: [Java+Python]삽입 정렬(Insert Sort) [Java+Python]버블 정렬(Bubble Sort) [Java+Python]선택 정렬(Selection Sort) [Java+Python]힙 정렬(Heap Sort) [Java+Python]퀵 정렬(Quick Sort) [Java+Python]카운팅 정렬(Counting Sort) 병합 정렬은 전설적인 수학자 폰 노이만이 고안한 알고리즘으로, 대상을 모두 쪼갠 뒤 다시 합치며(Merge) 크기를 비교해 정렬하는 방식이다. 앞서 알아본 버블, 선택, 삽입 정렬에 비해 빠르나 퀵 정렬에 비해 성능이 떨어지고, 정렬 대상의 크기만 한 메모리를 요구하지만 힙, 퀵 정렬과는 다르게 안정적인 정렬이라는 특징이 있다. 추가로 병합..
문제 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … … 3/1 3/2 3/3 … … … 4/1 4/2 … … … … 5/1 … … … … … … … … … … … 이와 같이 나열된 분수들을 1/1 → 1/2 → 2/1 → 3/1 → 2/2 → … 과 같은 지그재그 순서로 차례대로 1번, 2번, 3번, 4번, 5번, … 분수라고 하자. X가 주어졌을 때, X번째 분수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다. 출력 첫째 줄에 분수를 출력한다. 풀이 지난 문제의 계차수열에 이어 이번엔 군수열이다. 주어진 순서에 따라 분자, 분모는 각각 분자 - (1), (1, 2), (3, 2, 1), (1, 2, 3, 4) , (5, 4, ..
문제 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다. 입력 첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다. 출력 입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다. 풀이 문제를 한 마디로 축약하면 라고 할 수 있다. 해서 규칙을 찾으면 첫 번째 껍질은 1개, 두 번째는 6개, 세 번째는 12개, 그 ..
으로 구현한 다른 정렬: [Java+Python]삽입 정렬(Insert Sort) [Java+Python]버블 정렬(Bubble Sort) [Java+Python]병합 정렬(Merge Sort) [Java+Python]힙 정렬(Heap Sort) [Java+Python]퀵 정렬(Quick Sort) [Java+Python]카운팅 정렬(Counting Sort) 선택 정렬은 한 마디로 말하면 처음부터 끝까지 훑어서 가장 작은(혹은 큰) 숫자를 처음 인덱스에 넣는 방식이다. 시간 복잡도가 같은 삽입 정렬이나 버블 정렬이 그때그때 값을 바꾸는 데 비해 선택 정렬은 한 바퀴에 한 번씩 원소를 배정한다. 어떤 정렬 상황에서건 일관되게 O(N2)의 속도를 보여준다는 특징도 가지고 있으며, 버블 정렬에 비해 두 배 ..
문제 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다. 단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 단어의 개수 N이 들어온다. N은 100보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 단어가 들어온다. 단어는 알파벳 소문자로만 되어있고 중복되지 않으며, 길이는 최대 100이다. 출력 첫째 줄에 그룹 단어의 개수를 출력한다. 풀이 같은 알파벳이라면 끊어지지 않고 등장해야 하는 것이 규칙이..
문제 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= 예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다. dž 는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다 입력 첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다. 단어는 크로아티아 알파벳으로 이루어져 ..
으로 구현한 다른 정렬: [Java+Python]삽입 정렬(Insert Sort) [Java+Python]선택 정렬(Selection Sort) [Java+Python]병합 정렬(Merge Sort) [Java+Python]힙 정렬(Heap Sort) [Java+Python]퀵 정렬(Quick Sort) [Java+Python]카운팅 정렬(Counting Sort) 버블 정렬(Bubble Sort)은 간단히 말하면 처음부터 시작해 인접한 원소와 비교해 자리를 바꾸는 알고리즘이다. 한 바퀴 돌 때마다 원소 하나가 확실히 정렬되기 때문에, 거품이 떠오르는 것 같다고 해서 붙은 이름이기도 하다. 선택 정렬, 삽입 정렬과 함께 최악의 효율을 보여주며, 그 와중에도 삽입 정렬보다 느리다. 최선의 상황(정렬이 끝난..
문제 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다. 입력 첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다. 출력 첫째 줄에 단어의 개수를 출력한다. 풀이 문제를 잘못 읽었나 싶을 정도로 간단한 문제라 설명할 게 없다. 조금 신경쓴 부분이 있다면 다른 유니코드 공백이 나올지도 모르기 때문에 자바 11부터 지원한 strip()을 썼다는 것 정도. 그래도 설명을 덧붙이자면 문자..
- Total
- Today
- Yesterday
- 리스트
- RX100M5
- 칼이사
- BOJ
- Python
- 자바
- 세모
- 파이썬
- 백준
- 남미
- Algorithm
- 알고리즘
- Backjoon
- a6000
- 스프링
- 유럽여행
- 면접 준비
- spring
- 유럽
- 세계여행
- 기술면접
- 지지
- 맛집
- 여행
- 스트림
- java
- 세계일주
- 중남미
- 동적계획법
- 야경
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |