전체 글

· PS
9996. 예외처리 https://www.acmicpc.net/problem/9996 9996번: 한국이 그리울 땐 서버에 접속하지 총 N개의 줄에 걸쳐서, 입력으로 주어진 i번째 파일 이름이 패턴과 일치하면 "DA", 일치하지 않으면 "NE"를 출력한다. 참고로, "DA"는 크로아티어어로 "YES"를, "NE"는 "NO"를 의미한다. www.acmicpc.net [풀이] substr()과 find()를 사용해서 구현할 수도 있고 나처럼 reverse()를 사용해 구현할 수도 있다. 패턴에서 앞에서부터 *가 나올 때까지를 파일이름의 앞에서부터 비교하고, 패턴에서 뒤에서부터 *가 나올 때까지를 파일이름의 뒤에서부터 비교하며 패턴과 파일이름이 다르면 flag++ 한다. 이 때 예외처리를 생각하지 못해서 많이..
· PS
3273. 런타임에러(OutOfBounds)https://www.acmicpc.net/problem/3273 3273번: 두 수의 합n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는www.acmicpc.net [풀이] 위 문제를 풀면서 런타임에러를 7번이나 받아서 왜 런타임에러가 발생했고 어떤 부분에서 주의하면 되는지 설명도 하면 좋을 것 같다.런타임 에러는 1) 0으로 나눴을 때 2) 배열에 존재하지 않는 인덱스를 참조했을 때 2번의 경우에 배열의 크기를 초과한 인덱스를 참조하는 경우, 배열의 음의 인덱스를..
· C++
reverse()는 STL 지원 함수로 문자열, 배열, 벡터 모두 뒤집을 수 있다. 반환형이 없고 string 메서드가 아니므로 reverse(시작주소, 끝주소) 와 같이 사용한다. (A.reverse() X) 1. 문자열 string A = "abcde"; reverse(A.begin(), A.end()); cout
· PS
10988.https://www.acmicpc.net/problem/10988 10988번: 팰린드롬인지 확인하기첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.www.acmicpc.net [풀이]#include using namespace std; string input; int flag; int main(){ ios::sync_with_stdio(0); cin.tie(0); cin >> input; for (int i=0; i
· PS
10804. https://www.acmicpc.net/problem/10804 10804번: 카드 역배치 1부터 20까지 오름차순으로 놓인 카드들에 대해, 입력으로 주어진 10개의 구간 순서대로 뒤집는 작업을 했을 때 마지막 카드들의 배치를 한 줄에 출력한다. www.acmicpc.net [풀이] 배열 혹은 문자열의 내부 요소를 뒤집는 STL지원 함수 reverse()를 사용하면 된다. 배열에서는 reverse(a, a+5) 와 같이 사용하면 되고 문자열에서는 reverse(a.begin(), a.begin + 5) 와 같이 사용하면 된다. #include using namespace std; int card[20]; int a,b; int main(){ ios::sync_with_stdio(0); c..
· PS
2309. 조합 https://www.acmicpc.net/problem/2309 2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net [풀이] 순열, 조합 문제이며 세 가지 풀이가 있다. 첫 번째로, 직관적으로 9명 중 7명을 선택하는 조합 문제로 해결할 수 있다. 조합 문제는 크게 이중 for문, 재귀함수 두 가지 방법으로 풀 수 있는데 9C7은 9C2이므로 이중 for문으로 조합을 구현하는 것이 가장 쉽다. ( 3중까지는 중첩 for문으로 작성하는 것이 좋다. ) #include using namespace std; ..
· C++
Stack 1. push(value) stack stk; stk.push("hello"); 2. pop() pop()의 반환형은 없다. 중요한 것은 스택이 empty 일 때, 런타임에러(Segmentation fault)가 발생한다. stack stk; stk.pop(); 3. top() stack stk; stk.push("hello"); auto a = stk.top(); cout
· C++
1. push_front(value) list a = {1,2,3}; a.push_front(9); [결과] a is 9 1 2 3 2. push_back(value) list a = {1,2}; a.push_back(1); [결과] a is 1 2 1 3. insert(idx, value) list a = {1,2,3,4}; auto it = a.begin(); it++; a.insert(it ,10); [결과] a is 1 100 2 3 4 4. erase(idx) erase()는 iterator를 반환하기 때문에 iterator it 를 계속 사용하려면 반환받아야 한다. iterator를 반환받지 않고 동일한 iterator를 사용하면 런타임에러가 발생한다. // 1. 반환받지 않은 경우 list ..
· C++
lower_bound()는 정렬되어 있는 배열에서 찾으려는 값의 첫 인덱스, upper_bound()는 찾으려는 값을 초과하는 인덱스 중 첫 인덱스를 찾는다. 이진탐색을 기반으로 탐색하기 때문에 반드시 정렬된 배열에 사용해야 한다. 아래 숫자 3을 찾는 코드를 통해 실제 사용 법을 쉽게 파악할 수 있을 것이다. #include using namespace std; int main(){ vector a {1,2,3,3,3,4}; cout
· C++
01. +=메서드는 아니지만 문자열을 더할 때 사용한다. push_back() 메서드는 문자 하나씩밖에 더하지 못해 += 를 더 자주 사용한다.string a = "abc"; a += "d";02. begin(), end()begin()은 문자열의 첫 번째 요소를 가리키는 이터레이터를 반환하고 end()는 문자열의 마지막 요소의 그 다음을 가리키는 이터레이터를 반환한다. 해당 위치의 값을 뽑아내기 위해서는 이터레이터를 기반으로 * 를 사용할 수 있다.string A = "abc"; cout
20240619
kugnuoy