1. 문제 링크

 

https://www.acmicpc.net/problem/1406

 

1406번: 에디터

문제 한 줄로 된 간단한 에디터를 구현하려고 한다. 이 편집기는 영어 소문자만을 기록할 수 있는 편집기로, 최대 600,000글자까지 입력할 수 있다. 이 편집기에는 '커서'라는 것이 있는데, 커서는

www.acmicpc.net

 

 

 

2. 문제 설명

string을 입력받은 후 명령어에 따라 기능을 수행한 후 남아있는 string을 출력하는 문제입니다.

 

 

 

3. 소스코드

BOJ 1406번 에디터 C++ 풀이입니다.

#include <iostream>
#include <list>
using namespace std;

int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	string s;
	char op;
	int M;
	cin >> s >> M;
	list<char> l(s.begin(), s.end());
	list<char>::iterator t = l.end();
	// auto t = l.end();

	for (int i = 0; i < M; i++) {
		cin >> op;
		if (op == 'L' && t != l.begin()) t--;
		else if (op == 'D' && t != l.end()) t++;
		else if (op == 'B' && t != l.begin()) t = l.erase(--t);
		else if (op == 'P') {
			cin >> op;
			l.insert(t, op);
		}
	}
	for (t = l.begin(); t != l.end(); t++) cout << *t;
	// for (auto c : l) cout << c;

	return 0;
}

연결 리스트를 사용하면 쉽게 풀 수 있는 문제이므로 14번 라인에서 입력받은 문자열을 list<char>에 대입했습니다.

문제에서 커서는 문장의 맨 뒤에 위치하고 있다고 했기 때문에 15번 라인에서 iterator t를 l.end()로 초기화했습니다.

16번 라인처럼 auto를 사용해도 됩니다.

 

명령어가 L이고 커서가 문장의 맨 앞(l.begin())이 아니면 커서를 한칸 앞으로 이동합니다. (t--)

명령어가 D이고 커서가 문장의 맨 뒤(l.end())가 아니면 커서를 한칸 뒤로 이동합니다. (t++)

 

명령어가 B이고 커서가 문장의 맨 앞(l.begin())이 아니면 커서 왼쪽에 있는 문자(--t)를 삭제합니다.

list의 erase함수를 사용할 때 return값은 지운 요소의 다음 요소를 반환하므로 이를 다시 t에 대입해줍니다.

return값을 활용하지 않으려면 t--; l.erase(t++);과 같이 사용하면 됩니다.

 

명령어가 P이면 커서 왼쪽에 문자를 추가하므로 t위치에 insert하면 됩니다.

list의 insert함수는 iterator가 가리키는 곳의 왼쪽에 삽입하고, iterator는 원래 요소를 그대로 가리킵니다.

 

리스트를 출력하는 방법은 28번 라인처럼 for문에 iterator를 사용하면 됩니다.

29번 라인처럼 auto를 사용해도 됩니다. 

'Algorithm > Study' 카테고리의 다른 글

[백준 13300번 C++] 방 배정  (0) 2020.05.13
[백준 11328번 C++] Strfry  (0) 2020.05.13
[백준 10807번 C++] 개수 세기  (0) 2020.05.12
[백준 10808번 C++] 알파벳 개수  (0) 2020.05.12
[백준 2446번 C++] 별 찍기 - 9  (0) 2020.04.30

1. 문제 링크

 

https://www.acmicpc.net/problem/10807

 

10807번: 개수 세기

첫째 줄에 정수의 개수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 정수가 공백으로 구분되어져있다. 셋째 줄에는 찾으려고 하는 정수 v가 주어진다. 입력으로 주어지는 정수와 v는 -100보다 크거나 같으며, 100보다 작거나 같다.

www.acmicpc.net

 

 

 

2. 문제 설명

N개의 정수를 입력받은 후, 찾으려고 하는 정수 v가 몇 개인지 출력하는 문제입니다.

 

 

 

3. 소스코드

BOJ 10807번 개수 세기 C++ 풀이입니다.

#include <iostream>
using namespace std;

int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	int N, num, v;
	int arr[201] = {};
	cin >> N;

	for (int i = 0; i < N; i++) {
		cin >> num;
		arr[num + 100]++;
	}
	cin >> v;
	cout << arr[v + 100];

	return 0;
}

입력으로 주어지는 정수와 v는 -100보다 크거나 같고, 100보다 작거나 같으므로

10번 라인에서 arr[201]로 선언 후 0으로 초기화 했습니다.

배열의 인덱스는 0부터 시작하므로 -100일 때 0번 인덱스에 저장하기 위해서 15번 라인처럼 +100을 해줍니다.

마찬가지로 출력할 때도 18번 라인처럼 +100을 해주면 됩니다.

'Algorithm > Study' 카테고리의 다른 글

[백준 11328번 C++] Strfry  (0) 2020.05.13
[백준 1406번 C++] 에디터  (0) 2020.05.13
[백준 10808번 C++] 알파벳 개수  (0) 2020.05.12
[백준 2446번 C++] 별 찍기 - 9  (0) 2020.04.30
[백준 2445번 C++] 별 찍기 - 8  (0) 2020.04.30

1. 문제 링크

https://www.acmicpc.net/problem/10808

 

10808번: 알파벳 개수

단어에 포함되어 있는 a의 개수, b의 개수, …, z의 개수를 공백으로 구분해서 출력한다.

www.acmicpc.net

 

 

 

2. 문제 설명

string을 입력받은 후 단어에 포함되어 있는 알파벳의 개수를 각각 출력하는 문제입니다.

 

 

 

3. 소스코드

BOJ 10808번 알파벳 개수 C++ 풀이입니다.

#include <iostream>
using namespace std;

int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	int arr[26] = {};
	string S;
	cin >> S;

	for (int i = 0; i < S.length(); i++) arr[S[i] - 'a']++;
    // for (auto s : S) arr[s - 'a']++;
	for (int i = 0; i < 26; i++) cout << arr[i] << ' ';

	return 0;
}

9번 라인에서 arr배열을 0으로 초기화해주기 위해 {}을 사용했습니다.

13번 라인 for문에서 string을 한칸씩 돌면서 해당하는 arr의 인덱스의 값을 증가시켜주고,

15번 라인 for문으로 arr을 출력하면 됩니다.

13번 라인은 auto를 사용하면 14번 라인처럼 써도 됩니다.

'Algorithm > Study' 카테고리의 다른 글

[백준 1406번 C++] 에디터  (0) 2020.05.13
[백준 10807번 C++] 개수 세기  (0) 2020.05.12
[백준 2446번 C++] 별 찍기 - 9  (0) 2020.04.30
[백준 2445번 C++] 별 찍기 - 8  (0) 2020.04.30
[백준 2444번 C++] 별 찍기 - 7  (0) 2020.04.30

1. 문제 링크

 

https://www.acmicpc.net/problem/2446

 

2446번: 별 찍기 - 9

첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

www.acmicpc.net

 

 

 

2. 문제 설명

N을 입력받은 후 모래시계 모양으로 출력하는 문제입니다.

 

 

 

3. 소스코드

BOJ 2446번 별 찍기 - 9 C++ 풀이입니다.

#include <iostream>
using namespace std;

int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	int N;
	cin >> N;

	for (int i = 0; i < N; i++) {
		for (int j = 0; j < i; j++)
			cout << ' ';
		for (int j = 1; j <= (2 * (N - i)) - 1; j++)
			cout << '*';
		cout << '\n';
	}
	for (int i = 1; i < N; i++) {
		for (int j = 1; j < N - i; j++)
			cout << ' ';
		for (int j = 1; j <= (2 * i) + 1; j++)
			cout << '*';
		cout << '\n';
	}

	return 0;
}

이중 for문을 두 번 사용하여 역피라미드 모양으로 *을 출력한 후, 피라미드 모양으로 *을 출력하면 됩니다.

'Algorithm > Study' 카테고리의 다른 글

[백준 10807번 C++] 개수 세기  (0) 2020.05.12
[백준 10808번 C++] 알파벳 개수  (0) 2020.05.12
[백준 2445번 C++] 별 찍기 - 8  (0) 2020.04.30
[백준 2444번 C++] 별 찍기 - 7  (0) 2020.04.30
[백준 2443번 C++] 별 찍기 - 6  (0) 2020.04.30

1. 문제 링크

https://www.acmicpc.net/problem/2445

 

2445번: 별 찍기 - 8

첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

www.acmicpc.net

 

 

 

2. 문제 설명

N을 입력받은 후 리본모양으로 *을 출력하는 문제입니다.

 

 

 

3. 소스코드

BOJ 2445번 별 찍기 - 8 C++ 풀이입니다.

#include <iostream>
using namespace std;

int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	int N;
	cin >> N;

	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= i; j++)
			cout << '*';
		for (int j = 1; j <= (2 * N) - (2 * i); j++)
			cout << ' ';
		for (int j = 1; j <= i; j++)
			cout << '*';
		cout << '\n';
	}
	for (int i = 1; i < N; i++) {
		for (int j = 1; j <= N - i; j++)
			cout << '*';
		for (int j = 1; j <= 2 * i; j++)
			cout << ' ';
		for (int j = 1; j <= N - i; j++)
			cout << '*';
		cout << '\n';
	}

	return 0;
}

이중 for문을 두 번 사용하여 *, 공백, * 순서로 출력하면 됩니다.

'Algorithm > Study' 카테고리의 다른 글

[백준 10808번 C++] 알파벳 개수  (0) 2020.05.12
[백준 2446번 C++] 별 찍기 - 9  (0) 2020.04.30
[백준 2444번 C++] 별 찍기 - 7  (0) 2020.04.30
[백준 2443번 C++] 별 찍기 - 6  (0) 2020.04.30
[백준 2442번 C++] 별 찍기 - 5  (0) 2020.04.30

1. 문제 링크

 

https://www.acmicpc.net/problem/2444

 

2444번: 별 찍기 - 7

첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

www.acmicpc.net

 

 

 

2. 문제 설명

N을 입력받은 후 다이아몬드 형태로 출력하는 문제입니다.

 

 

 

3. 소스코드

BOJ 2444번 별 찍기 - 7 C++ 풀이입니다.

#include <iostream>
using namespace std;

int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	int N;
	cin >> N;

	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= N - i; j++)
			cout << ' ';
		for (int j = 1; j <= (2 * i) - 1; j++)
			cout << '*';
		cout << '\n';
	}
	for (int i = 1; i < N; i++) {
		for (int j = 1; j <= i; j++)
			cout << ' ';
		for (int j = 1; j <= (2 * (N - i)) - 1; j++)
			cout << '*';
		cout << '\n';
	}

	return 0;
}

이중 for문을 두 번 사용하여 피라미드 형태로 먼저 출력한 후, 역피라미드 형태로 출력하면 됩니다.

'Algorithm > Study' 카테고리의 다른 글

[백준 2446번 C++] 별 찍기 - 9  (0) 2020.04.30
[백준 2445번 C++] 별 찍기 - 8  (0) 2020.04.30
[백준 2443번 C++] 별 찍기 - 6  (0) 2020.04.30
[백준 2442번 C++] 별 찍기 - 5  (0) 2020.04.30
[백준 2441번 C++] 별 찍기 - 4  (0) 2020.04.30

1. 문제 링크

https://www.acmicpc.net/problem/2443

 

2443번: 별 찍기 - 6

첫째 줄에는 별 2×N-1개, 둘째 줄에는 별 2×N-3개, ..., N번째 줄에는 별 1개를 찍는 문제 별은 가운데를 기준으로 대칭이어야 한다.

www.acmicpc.net

 

 

 

2. 문제 설명

N을 입력받은 후 역피라미드 형태로 *을 출력하는 문제입니다.

 

 

 

3. 소스코드

BOJ 2443번 별 찍기 - 6 C++ 풀이입니다.

#include <iostream>
using namespace std;

int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	int N;
	cin >> N;

	for (int i = 0; i < N; i++) {
		for (int j = 0; j < i; j++)
			cout << ' ';
		for (int j = 1; j <= (2 * (N - i)) - 1; j++)
			cout << '*';
		cout << '\n';
	}

	return 0;
}

이중 for문을 사용하여 공백을 먼저 출력한 후, (2 * (N - i)) - 1개의 *을 출력하면 됩니다.

 

'Algorithm > Study' 카테고리의 다른 글

[백준 2445번 C++] 별 찍기 - 8  (0) 2020.04.30
[백준 2444번 C++] 별 찍기 - 7  (0) 2020.04.30
[백준 2442번 C++] 별 찍기 - 5  (0) 2020.04.30
[백준 2441번 C++] 별 찍기 - 4  (0) 2020.04.30
[백준 2440번 C++] 별 찍기 - 3  (0) 2020.04.30

1. 문제 링크

https://www.acmicpc.net/problem/2442

 

2442번: 별 찍기 - 5

첫째 줄에는 별 1개, 둘째 줄에는 별 3개, ..., N번째 줄에는 별 2×N-1개를 찍는 문제 별은 가운데를 기준으로 대칭이어야 한다.

www.acmicpc.net

 

 

 

2. 문제 설명

N을 입력받은 후 피라미드 형태로 *을 출력하는 문제입니다.

 

 

 

3. 소스코드

BOJ 2442번 별 찍기 - 5 C++ 풀이입니다.

#include <iostream>
using namespace std;

int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	int N;
	cin >> N;

	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= N - i; j++)
			cout << ' ';
		for (int j = 1; j <= (2 * i) - 1; j++)
			cout << '*';
		cout << '\n';
	}

	return 0;
}

이중 for문을 사용하여 공백을 먼저 출력한 후, (2 * i) - 1개의 *을 출력하면 됩니다.

'Algorithm > Study' 카테고리의 다른 글

[백준 2444번 C++] 별 찍기 - 7  (0) 2020.04.30
[백준 2443번 C++] 별 찍기 - 6  (0) 2020.04.30
[백준 2441번 C++] 별 찍기 - 4  (0) 2020.04.30
[백준 2440번 C++] 별 찍기 - 3  (0) 2020.04.30
[백준 2439번 C++] 별 찍기 - 2  (0) 2020.04.30

1. 문제 링크

 

https://www.acmicpc.net/problem/2441

 

2441번: 별 찍기 - 4

첫째 줄에는 별 N개, 둘째 줄에는 별 N-1개, ..., N번째 줄에는 별 1개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.

www.acmicpc.net

 

 

 

2. 문제 설명

N을 입력받은 후 N부터 1개의 별을 오른쪽 정렬하여 각각의 줄에 출력하는 문제입니다.

 

 

 

3. 소스코드

BOJ 2441번 별 찍기 - 4 C++ 풀이입니다.

#include <iostream>
using namespace std;

int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	int N;
	cin >> N;

	for (int i = 0; i < N; i++) {
		for (int j = 0; j < i; j++)
			cout << ' ';
		for (int j = N - i; j > 0; j--)
			cout << '*';
		cout << '\n';
	}

	return 0;
}

이중 for문을 사용하여 개수에 맞게 공백을 먼저 출력하고 이어서 *을 출력하면 됩니다.

 

'Algorithm > Study' 카테고리의 다른 글

[백준 2443번 C++] 별 찍기 - 6  (0) 2020.04.30
[백준 2442번 C++] 별 찍기 - 5  (0) 2020.04.30
[백준 2440번 C++] 별 찍기 - 3  (0) 2020.04.30
[백준 2439번 C++] 별 찍기 - 2  (0) 2020.04.30
[백준 2438번 C++] 별 찍기 - 1  (0) 2020.04.30

1. 문제 링크

https://www.acmicpc.net/problem/2440

 

2440번: 별 찍기 - 3

첫째 줄에는 별 N개, 둘째 줄에는 별 N-1개, ..., N번째 줄에는 별 1개를 찍는 문제

www.acmicpc.net

 

 

 

2. 문제 설명

N을 입력받은 후 N부터 1개의 별을 각각의 줄에 출력하는 문제입니다.

 

 

 

3. 소스코드

BOJ 2440번 별 찍기 - 3 C++ 풀이입니다.

#include <iostream>
using namespace std;

int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	int N;
	cin >> N;

	for (int i = N; i > 0; i--) {
		for (int j = 1; j <= i; j++)
			cout << '*';
		cout << '\n';
	}

	return 0;
}

이중 for문을 사용하여 개수에 맞게 *을 출력하면 됩니다.

 

'Algorithm > Study' 카테고리의 다른 글

[백준 2442번 C++] 별 찍기 - 5  (0) 2020.04.30
[백준 2441번 C++] 별 찍기 - 4  (0) 2020.04.30
[백준 2439번 C++] 별 찍기 - 2  (0) 2020.04.30
[백준 2438번 C++] 별 찍기 - 1  (0) 2020.04.30
[백준 10804번 C++] 카드 역배치  (0) 2020.04.30

+ Recent posts