전체 글

취뽀완료
백준 문제풀이/브론즈1

백준 1145번 - 적어도 대부분의 배수

https://www.acmicpc.net/problem/1145 1145번: 적어도 대부분의 배수 첫째 줄에 다섯 개의 자연수가 주어진다. 100보다 작거나 같은 자연수이고, 서로 다른 수이다. www.acmicpc.net #include #include #define LENGTH 5 using namespace std; int main() { vector v(LENGTH); for (int i = 0; i > v[i]; } int num = 1; while (true) { int count = 0; for (int i = 0; i = 3) { cout

C++(따라하며 배우는 C++)

Chapter 9-(3). 연산자 오버로딩

chapter 9-11. copy = hello; 이렇게 값의 복사를 진행했다면. default copy constructor로 인해(얉은 복사), 우선은 hello.getstring()이나 copy.getstring()이나 둘다 동일하게 m_data를 출력할 것이다. 그런데 , 우리는 메모리 누수를 방지하기 위해, 생성자에서 new를 해줬다면, 소멸자에서 delete을 해줘야한다 배웠다. 그렇다면 문제가 생긴다. 복사를 했기에, hello객체와 copy 객체는 m_data를 공유한다(정확히 표현하자면, 동일한 주소값을 가지는 m_data)를 가진다. 문자열 자체가 주소값을 return 하기에, 같은 주소값을 공유하는데, 내가 { } 안에서 copy가 사라지면서 delete[]을 했다. 그러면 hello..

백준 문제풀이/브론즈2

백준 1264번 - 모음의 개수

https://www.acmicpc.net/problem/1264 1264번: 모음의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 영어 대소문자, ',', '.', '!', '?', 공백으로 이루어진 문장이 주어진다. 각 줄은 최대 255글자로 이루어져 있다. 입력의 끝에는 한 줄 www.acmicpc.net 사고과정) 1. 우선 반복문을 이용해 계속 문자열을 입력받고, 반복문의 조건에 != '#'을 하면 되겠다. 2. 저 모음들을 어떻게 처리할 것인가. 첫번째 방법은 저것들 배열에 넣고 주어진 문자열 vs 모음 배열 비교하기 두번째 방법은 그냥 조건문 이용해서 하기. 이번엔 갯수가 10개라 그냥 조건문 썼음. 주의) 문자열을 공백까지 받아야하기에, getline함수를 사용했다. ..

백준 문제풀이/실버3

백준 1269번 - 대칭 차집합

https://www.acmicpc.net/problem/1269 1269번: 대칭 차집합 첫째 줄에 집합 A의 원소의 개수와 집합 B의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 A의 모든 원소가, 셋째 줄에는 집합 B의 모든 원소가 빈 칸을 사이에 두고 각각 주어 www.acmicpc.net 사고과정) 1. (A집합 갯수 - 교집합 갯수 ) + (B집합 갯수 - 교집합 갯수) 하면 되겠구나. 그러면 교집합을 만들어야하네. 2. A와 B를 서로 비교해가면서 같은 걸 교집합 배열에 넣어야겠다. - > 여기서 문제 봉착. 원소의 갯수가 너무 크고(각 200,000)이다 보니 이중 반복문으로 일일이 반복하면 시간복잡도(n^2)이라 너무 시간이 오래 걸려서 시간 초과가 뜸. 3. 그렇다면..

백준 문제풀이/실버5

백준 1292번 - 쉽게 푸는 문제

https://www.acmicpc.net/problem/1292 1292번: 쉽게 푸는 문제 첫째 줄에 구간의 시작과 끝을 나타내는 정수 A, B(1 ≤ A ≤ B ≤ 1,000)가 주어진다. 즉, 수열에서 A번째 숫자부터 B번째 숫자까지 합을 구하면 된다. www.acmicpc.net 과정은 심플해보인다. 1. 해당 수열 만들기 -> 2. 받은 숫자째 합들 더하기. 수열을 어떻게 만들까가 문제인데.. 처음에는 N이 1000까지이므로, 정적 배열(int arr[1000])로 시도해봤다. 하지만 반복문 두개를 활용해서 인덱스 맞추기가 생각보다 까다로워서, 다른 방법을 고민하던 중 vector push_back을 떠올렸다. #include #include using namespace std; int mai..

백준 문제풀이/실버4

백준 1026번 - 보물

https://www.acmicpc.net/problem/1026 1026번: 보물 첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거 www.acmicpc.net 내 알고리즘의 핵심은 이렇다. 곱을 가장 작게 하려면 B 배열의 가장 큰 값은 A 배열의 가장 작은 값을 곱해줘야한다. B 배열의 수를 재배열해서는 안된다해서, B배열의 값을 똑같이 복사해서 만든 copy 배열을 만든 다음 A 배열은 오름차순, copy 배열은 내림차순으로 만들어준 다음 서로 곱하면서 더해줬다. #include #include using namespace std; bool ..

백준 문제풀이/실버5

백준 1094번 - 막대기

https://www.acmicpc.net/problem/1094 1094번: 막대기 지민이는 길이가 64cm인 막대를 가지고 있다. 어느 날, 그는 길이가 Xcm인 막대가 가지고 싶어졌다. 지민이는 원래 가지고 있던 막대를 더 작은 막대로 자른다음에, 풀로 붙여서 길이가 Xcm인 막대 www.acmicpc.net 문제가 말을 정말 어렵게 써놨는데... 쉽게 생각해보면 1. 막대 길이가 입력값 X보다 크면 2로 나눈다. 2. 만약 막대 길이가 입력값 x보다 작으면, 합에 더해지니까 입력값X에서 막대길이를 빼준다. 이땐 나눠준 것이니 횟수를 하나 증가시킨다. 3.이걸 반복하면, 결국에 x가 0이 되고 종료. 역시 알고리즘 풀 땐 샤프 들고 써봐야한다.. #include using namespace std;..

백준 문제풀이/브론즈1

백준 1110번 - 더하기 사이클

https://www.acmicpc.net/problem/1110 1110번: 더하기 사이클 0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, www.acmicpc.net #include #include using namespace std; int main() { int count = 0; int temp; int n; cin >> n;// 0

void_melody
성수의 프로그래밍 극복 기록