일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래머스
- 1620
- BOJ
- codeSyntaxHighlight
- mermaid js
- n^2 배열 자르기
- 18111
- Git Convention
- 주식 가격
- 소수 체크
- 10162
- 브루트포스 알고리즘
- C++
- js
- colorSyntax
- javascript
- 위클리 챌린지
- 5525
- react
- 2018 KAKAO BLIND RECRUITMENT
- 깊이 우선 탐색
- 구간 합 구하기 4
- 이분탐색
- 옵셔널 체이닝 연산자
- 다이내믹 프로그래밍
- 숫자 문자열과 영단어
- 없는 숫자 더하기
- 정수 삼각형
- 4796
- Hasing
- Today
- Total
목록Algorithm/BOJ (49)
개발하는 kim-hasa
https://www.acmicpc.net/problem/2805 2805번: 나무 자르기 첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보 www.acmicpc.net 바로 이전 문제와 같은 유형의 문제입니다. 최대 길이와 0 사이에서 이분탐색을 해서 나무를 최대한 적게 자르는 높이를 구하는 문제입니다. #include using namespace std; long long int arr[1000000]; int main(){ long long int n, k; cin >> n >> k; long long int maxLe..
https://www.acmicpc.net/problem/1654 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net 특정 랜선의 개수를 입력받고 , 원하는 만큼의 개수로 나누는데 그 나누는 최대값을 구하는 문제입니다. 1과 가장 긴 길이의 랜선 사이를 이분탐색해서 나누면 되는 문제였습니다. 다만 , 랜선의 최대 길이를 고려하지 않아서 문제가 발생하는 경우가 많았습니다. 랜선을 계산하는 문제를 long long int 처리를 해 주어서 문제를 해결했습니다. #include using ..
https://www.acmicpc.net/problem/1436 1436번: 영화감독 숌 666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타 www.acmicpc.net 666이 들어간 숫자를 만드는 문제입니다. 처음에는 규칙을 찾아서 돌리려고 했는데 , 규칙을 일정하게 나타내기가 매우 힘든 부분이 있었습니다. 그러던 중 아래 알고리즘 분류에 , 브루트포스 알고리즘이라는 것을 보게 되어서 처음부터 하나하나 다 돌려보면서 풀게 되었습니다. 666부터 세서 특정 번째까지 계산해버리면 됩니다. #include #include using namespace std; in..
https://www.acmicpc.net/problem/1406 1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수 www.acmicpc.net 커서의 위치에 따라서 문자를 추가하고 삭제하는 문제입니다. 커서의 좌측과 우측을 각각 스택으로 만들어서 저장합니다. 1. 커서를 왼쪽으로 이동한 경우 => 좌측 스택의 최상단을 우측 스택으로 이동시킵니다. 2. 커서를 오른쪽으로 이동한 경우 => 우측 스택의 최상단을 좌측 스택으로 이동시킵니다. 3. 삭제한 경우 => 좌측 스택의 최상단을 제거합니다. 4. 추가한 경우 => 좌측 스택의 최상단을 추..
https://www.acmicpc.net/problem/10799 10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net 쇠막대기가 괄호로 주어지고, ( ) 이 나타나는 경우 절단해서 조각의 개수를 구하는 문제입니다. 스택에 ( 가 들어오게 되면 막대기의 시작이므로 스택에 넣습니다. 스택에 ) 가 들어오게 되면 자르는 경우와 막대기가 끝나는 경우로 나뉩니다. 1. 자르는 경우 => ( ) 가 나타나는 경우 스택에서 ( 를 제거해야 합니다. 이때의 ( 는 막대기가 아니라 자르는 경우이기 때문입니다. 그 이후, 현재 있는 막대기의..
https://www.acmicpc.net/problem/1427 1427번: 소트인사이드 첫째 줄에 정렬하려고 하는 수 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 숫자가 들어오면 내림차순으로 정렬하는 문제입니다. 숫자 자체를 string으로 받습니다. 그 이후 하나씩 나누어서 벡터에 넣습니다. 이 상태에서 벡터를 소트하게 되면, 아스키코드 오름차순 순서로 정렬됩니다. 그렇다면 0부터 9 순서로 정렬되므로, 벡터의 뒤부터 출력하면 됩니다. #include #include #include #include using namespace std; int main(){ string str; cin >> str; vector arr; int len = s..
https://www.acmicpc.net/problem/2941 2941번: 크로아티아 알파벳 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= www.acmicpc.net 표현할 수 없는 크로아티아 알파벳을 변환해서 구하는 문제입니다. 처음부터 index로 위치를 찾고, 하나하나 경우의 수를 찾아가면서 구하는 문제입니다. #include #include using namespace std; int main(){ string str; cin >> str; int index = 0; int count = 0; int len = st..
https://www.acmicpc.net/problem/1789 1789번: 수들의 합 첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다. www.acmicpc.net 서로 다른 n개의 숫자의 합이 s일때, n의 최대값을 구하는 문제입니다. 어떻게 풀면 될까 고민하다가, 앞에서부터 더하는 방법을 생각했습니다. 1 + 2 + ... + n > s 가 될때 까지 더한 다음 그 개수에서 -1 을 한 답을 리턴합니다. -1을 하는 이유는 1 + 2 + 3 + ... + n - 1 = k 라고 한다면 k < s 가 됩니다. 그렇다면 그 뒤에 서로 다른 n을 추가할 수 없으니 n-1번째의 숫자에 s-k의 숫자를 더해서 구하는 방법이 최대로 많은 숫자를 넣는 방법입니다. #include us..
https://www.acmicpc.net/problem/10162 10162번: 전자레인지 3개의 시간조절용 버튼 A B C가 달린 전자레인지가 있다. 각 버튼마다 일정한 시간이 지정되어 있어 해당 버튼을 한번 누를 때마다 그 시간이 동작시간에 더해진다. 버튼 A, B, C에 지정된 시간은 www.acmicpc.net 특정 시간이 주어지면 그 시간에 맞춰서 전자레인지를 돌려야 합니다. 가장 먼저, 최소 단위가 10 이므로 10으로 나누어 떨어지지 않는다면 -1을 리턴합니다. 그 이후, 큰 숫자부터 나눈 몫을 저장하고 , 나머지를 넘겨줍니다. 몫을 순서대로 리턴하면 정답입니다. #include using namespace std; int main(){ int t; cin >> t; int countA =..
https://www.acmicpc.net/problem/2217 2217번: 로프 N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하 www.acmicpc.net 로프를 병렬연결해서 가장 큰 중량을 들 수 있는 경우를 구하는 문제입니다. 로프를 작은 무게부터 정렬한 후에, 특정 index부터 뒤의 모든 로프를 선택한다고 가정하면 최대로 들 수 있는 무게는 로프의 수 * 특정 index 이다. 이 방법으로 모든 경우를 돌려서 가장 큰 값을 리턴한다. #include #include #include using namespace std; int main..