본문 바로가기

전체 글84

[C++] 백준 9536번: 여우는 어떻게 울지? 문제 링크 https://www.acmicpc.net/problem/9536 풀이 방법 이 문제는 주어진 녹음 결과에서 동물의 울음소리를 찾는 문제입니다. 주어진 녹음 결과 문자열과 동물의 울음소리가 주어졌을 때, 동물의 울음소리 중에서 녹음 결과에 없는 소리를 찾아 출력하는 문제이다. 다음과 같은 시퀀스로 문제를 해결 할 수 있다. 입력 받은 녹음 결과 문자열을 공백을 기준으로 분할하여 벡터에 저장한다. "what does the fox say?"라는 문장이 나올 때까지 동물의 울음소리를 입력 받아 동물의 울음소리 중에서 실제 녹음 결과에 포함되는 소리를 벡터에 저장한다. 모든 녹음 결과와 동물의 울음소리를 비교하여 녹음 결과에 없는 동물의 울음소리를 찾아 결과 벡터에 저장합니다. 결과 벡터에 저장된 .. 2024. 2. 4.
[C++] 백준 2999번: 비밀 이메일 문제 링크 https://www.acmicpc.net/problem/2999 풀이 방법 위 문제는 정인이가 암호화한 문자열을 다시 해독하는 문제이다 따라서 암호화 하는 과정으로 이해하면 안 되고 해독하는 과정으로 이해해야 한다. 아래 예시를 들어보겠다. 만약 R=2, C=3 인 경우 암호화 된 문자열이 koaski라고 할 때 다음과 같이 3x2 배열의 형태로 변경한다. ko as ki 인덱스가 0인 열부터 전부 읽어 나가면 kakosi가 된다. 이 원리를 이용해서 문제를 쉽게 해결할 수 있다. 위 설명과 아래 코드의 주석을 참고해서 해당 문제를 이해하자! 코드 #include using namespace std; const int MAX_N = 105; char arr[MAX_N][MAX_N]; int .. 2024. 2. 4.
[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.
[C++] 백준 2941번: 크로아티아 알파벳 문제링크 https://www.acmicpc.net/problem/2941 풀이방법 String STL을 사용하여 쉽게 해결 할 수 있다. 모든 크로아티아 알파벳을 Vector에 넣어 놓고 입력 받은 문자열 중에 크로아티아 알파벳이 존재하면 해당 문자열을 1로 변경한다. 최종적으로 1로 변경된 개수를 세면 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 알 수 있다. 참고로 String STL의 내장된 find함수와 replace함수를 통해서 매우 쉽게 해결 할 수 있다. String 객체에 대해서 잘 모른다면 아래 영상을 참고하자 https://www.youtube.com/watch?v=Mj6D3HW_rCw&list=PLtqbFd2VIQv4O6D6l9HcD732hdrnYb6CY&index=.. 2024. 2. 4.
[C++] 백준 1543번: 문서 검색 문제링크 https://www.acmicpc.net/problem/1543 풀이방법 String STL을 사용하여 쉽게 해결 할 수 있다. 찾고 하는 문자열을 찾은 뒤에는 그 문자열 이후 문자열부터 다시 찾는 방식으로 개수를 세어나가면 정답을 구할 수 있다. 특히 string STL 에 내장되어있는 find 함수를 사용하면 더욱 쉽게 해결할 수 있다. String 객체에 대해서 잘 모른다면 아래 영상을 참고하자 https://www.youtube.com/watch?v=Mj6D3HW_rCw&list=PLtqbFd2VIQv4O6D6l9HcD732hdrnYb6CY&index=33 코드 #include using namespace std; int pos = 0; int main() { ios::sync_with.. 2024. 2. 4.