백준(baekjoon)-C++ 정리

SUIN·2022년 4월 28일
0

백준/프로그래머스

목록 보기
5/18
post-thumbnail

2588 곱셈

#include <iostream>

using namespace std;

int main() {
	int a, b;
	cin >> a >> b;
	cout << a * (b % 10) <<endl<< a * (b/10-(b/100*10))<<endl << a * (b /100)<<endl<< a*b; //�޷�
}

각 자릿수로 나눠서 곱하기..
일의 자리: b%10
십의 자리: (b/10)%10
백의 자리: b/100


2609 최대공약수와 최소공배수

#include <iostream>

using namespace std;

int suin(int a, int b) {
	int r;
	while (b != 0) {
		r = a % b;
		a = b;
		b = r;
	}
	return a;
}

int main() {
	int a, b;
	cin >> a >> b;

	cout << suin(a,b) << endl << (a*b)/suin(a,b);
	return 0;
}

유클리드 호제법
2개의 자연수에서 최대공약수를 구하는 알고리즘의 하나이다. 2개의 자연수 a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면, a와 b의 최대공약수는 b와 r의 최대공약수와 같다. 이 성질에 따라, b를 r로 나눈 나머지 r'를 구하고, 다시 r을 r'로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이 되었을 때 나누는 수가 a와 b의 최대공약수이다
출처: 위키백과

함수를 하나 만들어 유클리드 호제법을 활용한 최대공약수를 구하는 함수를 사용.
입력받은 값을 이용해 최대공약수를 출력하고,
최소공배수를 출력한다.
(최소공배수는 a와 b를 곱한 값을 최대공약수로 나눈 몫으로도 표현할 수 있다)


2752 세수정렬

#include <iostream>

using namespace std;

int main() {
	int a, b, c, empty;
	cin >> a >> b >> c;

	if (a > b) {
		empty = a;
		a = b;
		b = empty;
	}
	if (b>c) {
		empty = b;
		b = c;
		c = empty;
	}
	if (a > b) {
		empty = a;
		a = b;
		b = empty;
	}

	cout <<a << " " << b<< " " << c;

	return 0;
}

a와 b를 비교해서 더 작은 값을 a에 저장(다른 변수를 사용하여 위치 변경)
->b와c비교->a와b 비교(c와 비교하여 작은 값은 b로 새로 변경되었을 것이므로 a와 c가 아닌 a와 b를 비교해야 한다!)


2941

#include <iostream>

using namespace std;

int main() {
	string word;
	cin >> word;
	int result = word.size();
	for (int i = 1; i < word.size(); i++) {
		if (word[i - 1] == 'c' || word[i - 1] == 'd') {
			if (word[i] == '-')
				result--;
		}

		if (word[i - 1] == 'c' || word[i - 1] == 's' || word[i - 1] == 'z')
			if (word[i] == '=') {
				result--;
				if (word[i - 1] == 'z' && word[i - 2] == 'd')
					result--;
			}
			if (word[i - 1] == 'l' || word[i - 1] == 'n') {
				if (word[i] == 'j')
					result--;
			}
	}
	cout << result;

	return 0;
}

하나씩 비교해서 총 글자수를 계산,,
첫번째 문자를 먼저 확인하고, 그 다음 문자가 =,-,z,j중에 어떤 것이냐에 따라서 알파벳의 갯수를 파악하고 --를 진행, (단, dz=의 경우 유일하게 3글자이므로, z=가 확인되는 경우 맨 앞에 d가 존재하는지에 대한 여부를 확인한다.)
++복잡하기는 하지만 위처럼 중첩 if문을 이용해서 따로 검사하는 수 밖에 없는 것 같다.


3003 킹, 퀸, 룩, 비숍, 나이트, 폰

#include <iostream>

using namespace std;

int main() {
	int k, q, r, b, n, p;
	cin >> k >> q >> r >> b >> n >> p;
	
	cout << 1-k << " " << 1-q << " " << 2-r << " " << 2-b << " " << 2-n << " " << 8-p;
	return 0;
}

입력받은 수에서 각각 체스의 기본 구성 개수를 뺀다.


3004 체스판 조각

#include <iostream>
//https://jaimemin.tistory.com/1567
using namespace std;

int main() {
	int n, rkfh, tpfh;
	cin >> n;
	rkfh = n / 2 + 1;
	tpfh = n - rkfh + 2;
	cout << rkfh * tpfh;

	return 0;
}

열과 행을 계산하여 곱한다. (*)
(조각의 최댓값을 구하는 것이므로 한번 자를 때 마다 가로, 세로로 번갈아가면서 자르는 것을 가정하고 코드를 작성한다.)
열: 획 수/2+1 (2회에 한번씩 자르게 되며, 처음에 이미 1열, 1행이므로 +1)
행: 획 수-열 수 +2 (획 수에서 열로 자른만큼 제외하고 계산, 가로로 먼저 획을 자를 경우, 세로로 자르는 차례가 올 때에는 이미 1열, 2행이므로 +2)


오늘의 tmi: 저번달에 교보문고에서 한시간을 고민하고 고민해서 책 두권을 샀는데, 그 때 마지막까지 고민하던 책이 계속 눈 앞에서 아른거려서 오늘 교보문고에 가서 그 책을 사부렸다. 조남주 작가가 쓴 서영동 이야기라는 책인데, 아직 재밌는지는 잘 모르겠다. 그래도 이 작가분의 특유의 글솜씨가 너무 좋아서 그것만으로도 만족한다.. 천천히 애껴읽을 예정이다.

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

0개의 댓글