코딩테스트/Baekjoon 59

[백준 #10825] 국영수 (C++)

https://www.acmicpc.net/problem/10825 10825번: 국영수 첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1 www.acmicpc.net 이름, 국어, 영어, 수학을 한 쌍으로 묶기 위해 구조체를 사용하였다. student라는 구조체 안에 이름, 국어 점수, 영어 점수, 수학 점수를 넣어주어 만들었고 메인에서 학생의 수(n)를 입력받고 구조체를 동적으로 할당해주었다. student* st = new student[n]; 그리고 문제에 나와있는 조건에 맞게 cmp 함수를 만들어 구조체를 정렬시킬 때 cmp를 넣어..

[백준 #10816] 숫자 카드 2 (C++)

https://www.acmicpc.net/problem/10816 10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 이 문제는 upper_bound와 lower_bound를 사용하여 풀었다. upper_bound와 lower_bound는 이진 탐색을 기반으로 하는 탐색 방법으로, upper_bound는 찾으려는 원소보다 큰 숫자가 처음 나오는 위치를 lower_bound는 찾으려는 원소가 처음 나오는 위치 (없다면 그거보다 큰 원소가 처음 나오는 위치)를 알려주는 것이다. 처음..

[백준 #10867] 중복 빼고 정렬하기 (C++)

https://www.acmicpc.net/problem/10867 10867번: 중복 빼고 정렬하기 첫째 줄에 수의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. www.acmicpc.net 중복을 제거하는 것이 가장 중요한데, 이를 위해 unique()를 사용했다. 가장 먼저 수의 개수(n)를 입력받고 크기가 n인 벡터 v를 선언하여 for문을 통해 벡터에 숫자를 넣어주었다. 그다음 unique를 사용하기 위해 sort()로 벡터를 정렬해주고 erase와 unique를 사용하여 중복된 원소를 제거하고 벡터의 사이즈를 다시 설정해주었다. ** unique 함수는 중복된 원소를 제거해주지만, 벡터에 사이즈까지 동적으..

[백준 #1181] 단어 정렬 (C++)

https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 단어를 입력해서 벡터에 넣은 후 sort를 사용하여 정렬해 주었다. 이때 cmp라는 함수를 만들어 단어의 길이가 짧은 것부터 정렬하고, 단어의 길이가 같을 시에는 사전 순으로 정렬해 주었다. 그다음 중복되는 단어를 제거하기 위해 unique와 erase를 함께 사용하였다. unique는 중복된 원소를 제거해주지만 벡터에 사이즈까지 동적으로 줄여주지 않기 때문에 벡터의 빈 공간을 없애기 ..

[백준 #2776] 암기왕 (C++)

https://www.acmicpc.net/problem/2776 2776번: 암기왕 연종이는 엄청난 기억력을 가지고 있다. 그래서 하루 동안 본 정수들을 모두 기억 할 수 있다. 하지만 이를 믿을 수 없는 동규는 그의 기억력을 시험해 보기로 한다. 동규는 연종을 따라 다니며, www.acmicpc.net 이 문제는 binary_search()를 사용하여 풀었다. 수첩 1에 적어 놓은 정수를 입력하여 벡터 v에 넣어주고 이분 탐색을 위해 sort()로 정렬해주었다. 그다음 수첩 2에 적어 놓은 정수를 입력하면서 입력한 정수가 벡터 v에 존재하는지 이분 탐색을 하여 존재하면 1, 존재하지 않으면 0을 출력해주었다. #include #include #include using namespace std; int..

[백준 #5800] 성적 통계 (C++)

https://www.acmicpc.net/problem/5800 5800번: 성적 통계 첫째 줄에 중덕 고등학교에 있는 반의 수 K (1 ≤ K ≤ 100)가 주어진다. 다음 K개 줄에는 각 반의 학생수 N (2 ≤ N ≤ 50)과 각 학생의 수학 성적이 주어진다. 시험 성적은 0보다 크거나 같고, 100보다 www.acmicpc.net 메인에서 학생 성적을 벡터에 넣고, 벡터를 정렬하여 가장 높은 점수, 낮은 점수, 가장 큰 인접한 점수 차이를 배열에 넣어서 반환하는 함수를 정의하였다. result 함수에서 구한 가장 높은 점수, 낮은 점수, 가장 큰 인접한 점수 차이를 배열에 넣고 반환하여 메인에서 사용하기 위해 동적 할당을 해주었다. 내림차순으로 벡터를 정렬하면 가장 높은 점수는 0번째 인덱스 값..

[백준 #2693] N번째 큰 수 (C++)

https://www.acmicpc.net/problem/2693 2693번: N번째 큰 수 첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 배열 A의 원소 10개가 공백으로 구분되어 주어진다. 이 원소는 1보다 크거나 같고, 1,000 www.acmicpc.net 입력받은 수를 정렬하여 3번째 큰 값을 출력하면 된다. 많은 정렬 알고리즘 중에 평균적으로 좋은 성능을 가진 퀵 정렬을 사용하여 입력받은 배열을 정렬하고 3번째로 큰 수를 출력하였다. (오름차순으로 정렬되므로 7번째 인덱스) ex) 1 2 3 4 5 6 7 8 9 1000 idx: 0 1 2 3 4 5 6 7 8 9 #include #include using namespa..

[백준 #1357] 뒤집힌 덧셈 (C++)

https://www.acmicpc.net/problem/1357 1357번: 뒤집힌 덧셈 어떤 수 X가 주어졌을 때, X의 모든 자리수가 역순이 된 수를 얻을 수 있다. Rev(X)를 X의 모든 자리수를 역순으로 만드는 함수라고 하자. 예를 들어, X=123일 때, Rev(X) = 321이다. 그리고, X=100일 때, Rev( www.acmicpc.net X와 Y를 입력한 후 역순으로 뒤집어 더하고 그 결과를 역순으로 뒤집어서 출력하면 된다. 입력받은 int 형을 문자열로 변환하고 reverse를 사용하여 역순으로 뒤집는다. 그다음 atoi를 사용하여 뒤집은 문자열을 int 형으로 변환해주는 함수 rev를 만들었다. #include #include #include using namespace std;..

[백준 #2869] 달팽이는 올라가고 싶다 (C++)

https://www.acmicpc.net/problem/2869 2869번: 달팽이는 올라가고 싶다 첫째 줄에 세 정수 A, B, V가 공백으로 구분되어서 주어진다. (1 ≤ B < A ≤ V ≤ 1,000,000,000) www.acmicpc.net 이 문제는 반복문을 사용해서 풀면 시간초과가 나기 때문에 반복문을 사용하지 않고 푸는 것이 관건이다. 처음에는 반복문을 사용해서 sum에 A를 더한 후 V와 비교해서 계산해가는 방식으로 풀었다가 시간초과가 났다. 반복문을 사용하지 않고 ((V-A) % (A-B))를 사용하여 계산해 주었다. ((V-A) % (A-B)) == 0면 나누어떨어졌다는 뜻이기 때문에 정상에 도착하는 데 걸리는 날짜는 ((V-A) / (A-B)) + 1이고, 0으로 나누어떨어지지 ..

[백준 #11656] 접미사 배열 (C++)

https://www.acmicpc.net/problem/11656 11656번: 접미사 배열 첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000보다 작거나 같다. www.acmicpc.net 문자열을 입력받고 변수 i를 1씩 증가시켜가며 i부터 문자열 끝까지 추출하여 새로운 문자열을 만든 후, 이것을 벡터에 넣어주었다. 그다음 벡터를 오름차순으로 정렬한 후 출력해 주었다. #include #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); string s, sub; vector vec; cin >> s; int leng = s.size(); fo..