본문 바로가기

C++66

[C++] 백준 1969번: DNA 문제 링크 https://www.acmicpc.net/problem/1969 풀이 방법 DNA s1, s2, ..., sn가 주어져 있을 때 Hamming Distance의 합이 가장 작은 DNA s를 구해야 한다. 해당 문제의 핵심 Key Point는 입력된 문자열 s1,s2, ...., sn 똑같은 위치에 존재하는 알파벳 중 가장 많은 알파벳을 사전 순서대로 넣으면 해당 문자열 s를 구할 수 있다. 아래 예시를 참고하면 이해가 될 것이다. TATGATAC TAAGCTAC AAAGATCC TGAGATAC TAAGATGT 위 문자열에서 첫 번째 위치로 설명을 하면 T가 4개, A가 1개 이므로 T를 선택하면 된다. 이런 식으로 각 위치 별로 가장 많이 존재하는 알파벳을 하나 선택하면 TAAGATAC가 선.. 2024. 2. 4.
[C++] 백준 2870번: 수학숙제 문제 링크 https://www.acmicpc.net/problem/2870 풀이 방법 해당 문제를 푸는데 꽤 시간이 소모되었다. 이 문제를 해결하는데 가장 중요한 Key Points는 네 가지다. 우선 문자열 시작부터 탐색하여 숫자로만 이루어진 문자열을 추출한다. 추출한 해당 문자열이 모두 0으로 이루어져 있으면 "0"하나만 vector에 담는다 0으로 시작하는 숫자는 모두 무시하고 0 이후 시작되는 숫자부터 문자열을 다시 추출하여 vector에 담는다. 숫자를 int, long long 형으로 담으면 Over Flow가 발생할 수 있으니 문자열 그대로 비교 함수를 만들어서 숫자를 오름차순 정렬한다. 위 설명과 아래 코드의 주석을 참고해서 해당 문제를 이해하자! 코드 #include using name.. 2024. 2. 4.
[C++] 백준 3613번: Java vs C++ 문제링크 https://www.acmicpc.net/problem/3613 풀이방법 해당 문제는 다양한 조건을 전부 고려해야 한다는 부분에서 어려운 문제라고 생각한다. 하나라도 놓치면 해당 문제를 맞출 수 없기 때문에 다음과 같은 조건을 잘 고려해야 한다. 맨 뒤 문자가 '_' 이면 (Error!) 맨 앞 문자가 '_' 이면 (Error!) '_' 연속 두개 존재하면 (Error!) 맨 앞 문자가 대문자면 에러 (Error!) 대문자와 '_'가 각각 1개 이상 동시에 존재하면 (Error!) 그 외에 문제에서 정해진 조건인 영어 알파벳과 밑줄('_')로만 이루어져 있는 경우는 정상이라고 볼 수 있다. 아래 코드의 주석을 참고해서 해당 문제를 이해하자! 코드 #include using namespace s.. 2024. 2. 4.
[C++] 백준 9996번: 한국이 그리울 땐 서버에 접속하지 문제링크 https://www.acmicpc.net/problem/9996 풀이방법 String STL을 사용하여 쉽게 해결 할 수 있다. 두가지 조건에 대한 아이디어만 얻으면 쉽게 해결할 수 있다. 첫번째, 파일이름의 길이가 패턴이름에서 * 하나를 뺀 값 보다 작은 경우에는 당연히 패턴과 일치할 수 없다. 위 경우를 제외하고는 패턴이름의 앞 문자열과 뒤 문자열이 파일이름의 앞 문자열(패턴 이름의 앞문자열의 길이만큼) 뒤 문자열과(패턴 이름의 뒤 문자열 길이만큼)둘다 같으면 패턴이 일치하고 그렇지 않으면 패턴이 일치하지 않는다. 위 내용을 참고해서 코드를 보면 이해가 될 것 이다. 참고로 String STL에 포함된 substr 함수를 사용하니 해당 함수의 사용법을 익히도록 하자. String 객체에 대.. 2024. 2. 4.