본문 바로가기

C++

(53)
[백준 C++] 6550번 : 부분 문자열 https://www.acmicpc.net/problem/6550 6550번: 부분 문자열 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문자열 s 와 t가 빈칸을 사이에 두고 들어온다. s와 t의 길이는 10만을 넘지 않는다. www.acmicpc.net 풀이 : - 문자열 s와 t 2개가 주어지는데, s가 t의 부분 문자열인지를 판별해야 한다 - s는 연속적이지 않게 t에 속해있을 수도 있다 - t를 전체 탐색을 하며 s와 같을 때마다 s의 인덱스를 하나씩 밀고, 반복문을 빠져나왔을 때 s의 인덱스가 끝까지 밀어졌다면 속하는 것이고 그렇지 않다면 속하지 않는 것으로 판별할 수 있다 코드 : #include #include #include using n..
[백준 C++] 15719번 : 중복된 숫자 https://www.acmicpc.net/problem/15719 15719번: 중복된 숫자 1부터 N - 1까지의 정수가 하나씩 정렬되지 않은 채로 저장되어 있는 어떤 수열 A가 있다. 수열 A에 임의의 정수 M(1 ≤ M ≤ N – 1)을 넣어 크기가 N인 수열로 만들었을 때, 임의의 정수 M을 찾는 프 www.acmicpc.net 풀이 : - 주어진 수열에서 중복되는 숫자 1개를 찾아서 출력하는 것 - n의 최댓값이 10000000이라서 시간초과 나기 쉽다 - 중복되는 숫자가 1개뿐이라서 이전에 나온 적이 있는지만 체크할 bool배열을 사용했다 코드 : #include #include using namespace std; bool check[10000005] = {false, }; //초기값은 f..
[백준 C++] 4659번 : 비밀번호 발음하기 https://www.acmicpc.net/problem/4659 4659번: 비밀번호 발음하기 좋은 패스워드를 만드는것은 어려운 일이다. 대부분의 사용자들은 buddy처럼 발음하기 좋고 기억하기 쉬운 패스워드를 원하나, 이런 패스워드들은 보안의 문제가 발생한다. 어떤 사이트들은 xvtp www.acmicpc.net 풀이 : - 문제에서 요구하는 그대로 조건을 걸어주면 된다 - 모음이 등장하는지, 모음이나 자음이 3 이상 연속으로 나오지는 않는지, 같은 알파벳이 2번 나오는데 그게 e와o가 아닌지 - 전부 조건을 걸어주고 잘 통과했다면 acceptable을, 그렇지 않다면 not acceptable을 출력 코드 : #include #include #include using namespace std; in..
[백준 C++] 14912번 : 숫자 빈도수 https://www.acmicpc.net/problem/14912 14912번: 숫자 빈도수 자연수 n (1 ≤ n ≤ 100,000)과 한 자리 숫자 d(0~9)가 첫째 줄에 주어진다. www.acmicpc.net 풀이 : - 1부터 n까지의 숫자에서 각 숫자(digit)의 갯수를 카운트하고, 주어진 수의 digit이 몇 개인지 출력하는 문제 - 숫자보다는 문자열로 탐색하는게 편해서 문자열로 변환해서 각 자리수를 카운트했다 - 1부터 n까지 for문을 돌리고 i를 문자열로 변환한 뒤, 각 자리수를 카운트하는 배열에 카운트해서 넣어줬다 코드 : #include #include #include using namespace std; int main(){ cin.tie(NULL); ios::sync_with..
[Codeforce C++] div.3 Problem A. Insert Digit https://codeforces.com/contest/1811/problem/A Problem - A - Codeforces codeforces.com 풀이 : - n길이의 숫자가 주어지고, 숫자 digit(0~9)가 하나 주어진다. - digit을 숫자의 한 부분에 삽입하여 이 숫자를 최댓값으로 만들어 출력해야 한다 - n의 최댓값이 200000이고, 계산하기 편하도록 숫자는 문자열로 입력받는다 - 최댓값으로 만들기 위해서는 digit을 digit보다 작은 값 바로 앞에 넣으면 된다 - 따라서, 문자열을 앞에서부터 하나씩 출력하면서 탐색하는데, digit보다 작은 값이 나올 경우 digit을 먼저 출력하고 이어서 남은 문자열을 출력한다 - digit이 0이거나, digit과 같은 값으로 이루어진 문자..
[백준 C++] 15904번 : UCPC는 무엇의 약자일까? https://www.acmicpc.net/problem/15904 15904번: UCPC는 무엇의 약자일까? 첫 번째 줄에 알파벳 대소문자, 공백으로 구성된 문자열이 주어진다. 문자열의 길이는 최대 1,000자이다. 문자열의 맨 앞과 맨 끝에 공백이 있는 경우는 없고, 공백이 연속해서 2번 이상 주어지는 www.acmicpc.net 풀이 : - 주어진 문자열 안에서 U,C,P,C가 순서대로 나오는지를 물어보는 문제 - 원하는 문자가 규칙에 맞게 들어오면 새로운 문자열에 저장을 하고 마지막 문자와 비교를 하며 순서대로 들어오는지 체크 - 마지막 문자까지 순서대로 잘 들어왔다면 I love UCPC를 출력하고 return해서 종료 - 순서대로 들어오지 못했다면 일찍 종료되지 않아, I hate UCPC가 ..
[백준 C++] 10826번 : 피보나치 수 4 https://www.acmicpc.net/problem/10826 10826번: 피보나치 수 4 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 www.acmicpc.net 풀이 : - n번째 피보나치 수를 구하는 것으로, n의 최댓값이 10000이기 때문에 그냥 구하면 오버플로우가 난다 - 따라서 똑같이 dp 점화식을 세우되, 문자열의 배열을 만들어서 각 자리만 숫자로 변환해 계산해주었다 - 문자열이기 때문에 거꾸로 뒤집고, 둘의 길이를 맞춘 다음, 각 자리를 더해 10 이상인지를 확인하고, 10 이상이라면 다음 수에 1을 더..
[백준 C++] 5555번 : 반지 https://www.acmicpc.net/problem/5555 5555번: 반지 당신은 N개의 반지를 가지고 있다. 각각의 반지는 대문자 10 문자로 이루어진 문자열이 새겨져 있다. 반지는 문자열의 시작과 끝이 연결된 형태로 문자가 새겨져 있다. 반지에 각인된 문자열을 www.acmicpc.net 풀이 : - 반지 안에 찾고자 하는 문자열이 있다면 카운트해서 총 몇개의 반지가 이 문자열이 새겨져 있는지 출력 - 문자열이 반지의 앞과 끝에 나눠져 있더라도 반지는 둥글기 때문에 있다고 고려해야 한다 - 반지의 문자열을 한번 더해서 붙여준뒤, 탐색하면 된다 - 예제 2의 경우가 그러하다 XYZ가 앞에 Z, 뒤에 XY이렇게 나눠져있지만, 반지의 문자열을 합침으로 우리가 찾고자 하는 문자열로 만들 수 있다 Z..