백준(baekjoon)-C++ 정리

SUIN·2022년 4월 19일
0

백준/프로그래머스

목록 보기
3/18
post-thumbnail

1316 그룹 단어 체커

#include <iostream>

using namespace std;

int main() {
	int inp;
	string word;
	int count = 0;
	cin >> inp;

	for (int i = 0; i < inp; i++) {
		cin >> word;
		bool abc[26] = { false, };
		abc[(int)(word[0]) - 97] = true;

		for (int i = 1; i < word.size(); i++) {
			if (word[i] == word[i - 1]) {
				continue;
			}
			else if (word[i] != word[i - 1] && abc[(int)(word[i]) - 97] == true) {
				count++;
				break;
			}
			else {
				abc[(int)(word[i]) - 97] = true;
			}
		}
	}
	cout << inp - count;

	return 0;
}

단어 입력받기(string형태)
알파벳의 존재유무를 판단할 bool형 배열 abc 생성 후, false로 설정
첫번째 있는 알파벳(체커를 판단할 필요 x)을 abc에 true로 저장
(소문자 a의 아스키코드는 97부터 시작하므로 -97을 해주면 0~26까지 a~z로 가정하여 저장할 수 있음)

반복문
현재 알파벳과 앞전에 알파벳이 같은지 검사하고 같으면 다음으로 넘어간다.
같지 않다면 현재 알파벳이 이전에 등장했던 알파벳인지를 검사해보고
아니라면 현재 단어를 true로 바꾸어 앞으로 '이전에 등장했던 알파벳인지'를 검사하는 데 사용
맞다면 그룹단어가 아닌 것으로 체크하고 반복문을 종료
전체 입력한 단어 수에서 그룹단어가 아닌 수를 빼서 결과 출력

아스키코드 참고:


1427 소트인사이드

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

int main() {
	char n[11];
	cin >> n;
	for (int j = 0; j < strlen(n); j++) {
		for (int i = 0; i < strlen(n); i++) {
			int z;
			if (n[j] > n[i]) {
				z = n[i];
				n[i] = n[j];
				n[j] = z;
			}
		}
	}

	cout << n;

	return 0;
}

버블정렬(bubble sort): 두 원소를 검사하여 크기가 순서대로 되어 있지 않으면 서로 교환, 과정을 반복하여 모든 원소가 알맞은 순서를 찾을 수 있도록 함.(교환할 때에는 새로운 변수를 하나 설정하여 활용함)

숫자를 문자열 배열로 입력받아서 저장
반복(0부터 입력받은 n의 길이보다 작을때까지만 반복)
버블정렬을 활용하여 문자 정렬
출력

#include <iostream>
#include <algorithm>

using namespace std;

int main(void) {
    string str;
    cin>>str;
    sort(str.begin(), str.end(), greater<char>());
    cout<<str;
}

sort(start,end,정렬방식): 정렬해주는 함수(기본적으로 오름차순 정렬)
greater() : 내림차순으로 정렬

문자를 입력받아서 sort함수로 입력받은 문자의 처음부터 끝까지 내림차순으로 정렬 후 출력


1475 방 번호

#include <iostream>

using namespace std;

int main(void) {
	int n, num[10] = {}, maxx = -1, suin = 0;
	scanf("%d", &n);
	while (n >= 10) {
		num[n % 10]++;
		n /= 10;
	}
	num[n]++;
	for (int i = 0; i <10; i++) { //>
		if (i == 6 || i == 9)
			suin += num[i];
		else
			maxx = max(maxx, num[i]);
	}
	maxx = max(maxx, (suin + 1) / 2);
	printf("%d", maxx);
                       
}

max(a,b): 두개의 값을 비교하여 최댓값을 반환

숫자를 입력받고, 1의자리숫자부터 차례로 숫자를 판단
숫자를 미리 만들어둔 10개의 배열에 알맞은 위치에 저장,
입력받은 숫자를 10으로 나눈 몫을 다시 저장(한칸씩 왼쪽으로 옮겨서 숫자를 판별?)
->반복(나눈 몫이 일의자리 숫자가 될 때까지)
남은 1의자리 숫자도 배열에 저장
num의 최댓값을 0~10까지 하나씩 검사해서 판별 (6과 9의 값은 따로 저장)
마지막으로 0~10(6,9제외)의 최댓값과 6의값, 9의 값+1을 해주고 2로 나눈 나머지를 비교하고 최댓값을 저장
출력

==> 겁나 맘에 안드는~ 풀이~ 말을 되게 못하는 편입니다.. 양해를 구합니다.

오늘의 tmi: 거리두기가 풀렸다,,, 나는 자발적 거리두기를 당하고 있는데,, 넘무넘무 나가놀고 싚다,,but have a no friend.
그리고 나는 내가 약간 위장용 씝덕,, 패션 씝덕이라고 생각했는데 의외로 좀,, 진짜인 것 같다. 주변에 진짜들만 있어서 내가 진짜인 줄 몰랐다. 충격적이다,,

profile
공부하기싫을때붙잡고공부해봤자비명밖에안나옵니다지금제가그래요

0개의 댓글