< '프로그래밍 공부/백준 (C++)' 카테고리의 글 목록 (7 Page)

프로그래밍 공부/백준 (C++) 73

[C++/백준 1181번] 단어 정렬

https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 사용한 STL 및 함수 vector, sort, unique, erase , c_str() vector : string 값들을 담는 용도로 사용함 sort : 정렬 조건을 설정하고 정렬하는 용도로 사용 unique : 중복 값 제거 , 중복 값이 없는 컨테이너의 마지막 인덱스를 반환한다. erase : unique 실행 후 남는 쓰레기값들을 지우는 데 활용 c_str() : std::s..

[C++/백준 11650번] 좌표 정렬하기

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 해결 방법 정렬을 직접 구현해서 하려면 nlogn 시간복잡도를 가지는 정렬 알고리즘으로 정렬을 하면 될 듯 하다. 하지만 그렇게 하게 되면 조건이 생각보다 복잡해진다. stl vector 라이브러리를 사용하면 쉽게 풀 수 있다. #include #include #include using namespace std; vector v; int mai..

[C++/백준 10989번] 수 정렬하기 3 (카운팅 정렬)

https://www.acmicpc.net/problem/10989 10989번: 수 정렬하기 3 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. www.acmicpc.net 해결 방법 카운팅 정렬을 직접 구현해서 해결했다. 시간 제한이 5초에 메모리 제한이 8MB 라는 것은 많이 크지 않은 수들을 정렬하는 것이기 때문에 int 범위 내에서 해결이 가능하다. 카운팅 정렬에 대한 설명은 아래 블로그를 참고했다. 카운팅 정렬(Counting Sort, 계수 정렬) 알고리즘 읽기 전 불필요한 코드나 잘못 작성된 내용에 대한 지적은 언제나 환영합니다. 개인적으로 사용해보면서 배운 점을 정리한 글..

[C++/백준 2751번] 수 정렬하기 2

https://www.acmicpc.net/problem/2751 2751번: 수 정렬하기 2 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net #include #include using namespace std; void quick_sort(int* data, int start, int end) { if (start >= end) { return; } int pivot = start; int i = pivot + 1; int j = end; int temp; while (i j) { temp = data[j]; data[j] ..

[C++/백준 1018번] 체스판 다시 칠하기

https://www.acmicpc.net/problem/1018 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 해결 방법 네 가지 경우가 있다. (0,0) 이 B로 시작하고 현재 인덱스의 원소가 B인경우 (0,0) 이 B로 시작하고 현재 인덱스의 원소가 W인경우 (0,0) 이 W로 시작하고 현재 인덱스가 B인경우 (0,0) 이 W로 시작하고 현재 인덱스가 W인경우 이 네 가지 경우를 잘 생각해서 전부 세어주면 된다. Climits 헤더의 INT_MAX 를 사용하여 min 변수의 초기값을 설정해 주었..

[C++/백준 19532번] 수학은 비대면 강의입니다.

https://www.acmicpc.net/problem/19532 19532번: 수학은 비대면강의입니다 정수 $a$, $b$, $c$, $d$, $e$, $f$가 공백으로 구분되어 차례대로 주어진다. ($-999 \leq a,b,c,d,e,f \leq 999$) 문제에서 언급한 방정식을 만족하는 $\left(x,y\right)$가 유일하게 존재하고, 이 때 $x$와 $y$가 각각 $- www.acmicpc.net 해결방법 간단히 다 해보면 된다. 브루트 포스 문제이므로 제시한 범위 내의 변수를 모두 탐색해서 두 연립 방정식을 동시에 만족하는 x,y 를 찾는다. #include #include using namespace std; int main() { int a, b, c, d, e, f; cin >>..

[C++/백준 2231번] 분해합

2231번: 분해합 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 www.acmicpc.net 해결방법 처음부터 모든 경우를 다 시행해 본다. 매번 자릿수를 구해주어 최소의 부분합을 구해 입력한 숫자와 맞는지 계속 검사한다. #include #include using namespace std; int main() { int N; cin >> N; int digit = 0; int ans = 1; int tmp = ans; ans = 1; while (ans < N) { digit = 0; int i = 0; int sum = ..

[C++/백준 2745번] 진법 변환

https://www.acmicpc.net/problem/2745 2745번: 진법 변환 B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 www.acmicpc.net 찾은 반례 : A 11 -> 17 출력 해결 : 알파벳 범위를 제대로 설정함. 코멘트 : 버그가 발생하면 쳐다보기보다는 직접 한줄씩 실행해 보자. #include #include #include #include using namespace std; int main() { string N; int B; char tmp; // string에서 char로 변경 cin >> N >> B; int num =..

[C++/백준 2941번] 크로아티아 알파벳

https://www.acmicpc.net/problem/2941 2941번: 크로아티아 알파벳 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= www.acmicpc.net #include #include #include using namespace std; int main() { string input; cin >> input; string tmp; int cro = 0; for(int i = 0 ; i < input.length(); i++) { if(i == input.length()-1) { cro++; break; } e..