(백준BAEKJOOB )- 문자열 문제 4개 "c++"

2023. 3. 11. 20:26언어/c, c++

728x90

 

코드 1번 
문자와 문자열 문제

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

 

#include <iostream>
using namespace std;

int main()
{
	char word[1001];
	int num;
	cin >> word;
	cin >> num;
	cout << word[num - 1] << '\n';


	return 0;
}

 

내 제출은 c++로 하였다. 이 문제는 아주 기초인 문자열 문제여서 쉽게 풀었다.

 

 

#include <stdio.h>

int main()
{
    char word[1001];
    int num;
    scanf("%[^\n]s", word);
    scanf("%d", &num);
    printf("%c\n", word[num - 1]);
    return 0;
}

c언어로도 한번 만들어 봤다. 이건 정답과는 다르지만 scanf에 [^\n] s를 추가하게 되면

공백 까지도 포함시킬 수 있다.

 

 

코드 2번
문자열

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

 

이 문제  역시도 아주 기초적인 문제였다.

#include <iostream>
#include <string>

using namespace std;

int main() {
    string s;
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> s;
        cout << s[0] << s[s.length() - 1] << endl; 
    }
}

이 문제에서 요점은 length() 함수가 매우 중요할 거 같다.

 

 

 

코드 3번
상수

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

#include <iostream>
using namespace std;

int main() {
    int index = 2;
    string A, B;
    cin >> A >> B;
    while (index >= 0) {
        if (A[index] == B[index]) {
            cout << A[index--];
            continue;
        }
        if (A[index] > B[index])
            while (index >= 0)
                cout << A[index--];
        else
            while (index >= 0)
                cout << B[index--];
    }
}

index 2로 한 이유는 백의자리를 먼저 비교하고 점점 내려가서 일의 자리를 비교하게끔 만들었다.

 

만약 백의자리가 더큰 수가 있으면 입력받은 수를 반대로 출력하게 만든 코드이다.

 

 

이렇게 다른식으로 코드를 짤수도 있다.

계산을 통해서 나머지값을 이용해 자리를 바꿀 수 있다.

 

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main(void) {
	int A, B = 0;

	scanf("%d %d", &A, &B);

	A = A / 100 + A % 10 * 100 + A % 100 / 10 *10; // 1, 3, 2
	B = B / 100 + B % 10 * 100 + B % 100 / 10 * 10; // 1, 3, 2
	
	if (A > B) {
		printf("%d", A);
	}

	else if (B > A) {
		printf("%d", B);
	}
	
	return 0;
}

예를 들어 A = 125이고 B = 101인 경우:
A / 100 = 1(첫 번째 숫자 가져오기)
A % 10 = 5(마지막 숫자를 얻음)
A % 100 / 10 = 2(가운데 자리를 얻음)
A / 100 + A % 10 * 100 + A % 100 / 10 * 10 = 521 (처음 자리와 마지막 자리를 바꿉니다)
B / 100 = 1(첫 번째 숫자 가져오기)
B % 10 = 1(마지막 자리를 얻음)
B % 100 / 10 = 0 (가운데 자리를 얻음)
B / 100 + B % 10 * 100 + B % 100 / 10 * 10 = 101 (처음 자리와 마지막 자리를 바꿉니다)
따라서 이 연산 후에 A는 521이 되고 B는 101이 됩니다

 

 

 

코드 4번
줄 번호

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

 

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


int main() {
	int n;
	string s;

	cin >> n;
	cin.ignore();
	for (int i = 1; i <= n; i++) {
		getline(cin, s);
		cout << i << ". " << s<<'\n';
	}
}

이 문제는 그냥 인덱스만 나타내면 되는 문제인 줄 알았는데

띄어쓰기와 버퍼 비우기를 활용하지 않으면 쓰레기 값이 중간에 저장되어

틀렸습니다가 나오게 된다. 항상 문자열을 저장할 때는 버퍼 비우기와, getline을 잘 이용해야겠다.

728x90