🍧 문제탄소(C)와 수소(H)로만 이루어진 화합물을 탄화수소라 한다.탄소 1개의 질량은 12g, 수소 1개의 질량은 1g이다.에틸렌(C2H4)의 질량은 12 * 2 + 1 * 4 = 28g이다.메탄(CH4)의 질량은 12 * 1 + 1* 4 = 16g이다.탄화수소식이 주어지면 해당 화합물의 질량을 구하는 프로그램을 작성하라. 🍧 입력C2H4 🍧출력28 🍧 1트 ( 강의 풀이)#include #include #includeusing namespace std;int main(void){ freopen("input.txt", "rt", stdin); int sum = 0, c = 0, h = 0, pos , i; char a[10]; cin >> a; if(a[1] == 'H'){ c = 1; ..
분류 전체보기
🟩 LCS, 최장 공통 부분 수열 Longest Common Subsequence (cf. Longest Common Substring 최장 공통 문자열) 최장 공통 부분 수열의 경우, 부분수열이기 때문에 문자 사이를 건너뛰어 공통되면서 가장 긴 부분 문자열을 찾으면 된다.최장 공통 문자열의 경우, 부분 문자열이 아니기 때문에, 한 번에 이어져 있는 문자열만 가능하다. 🟩 최장 공통 문자열if i == 0 or j == 0: # 마진 설정 LCS[i][j] = 0elif string_A[i] == string_B[j]: LCS[i][j] = LCS[i - 1][j - 1] + 1else: LCS[i][j] = 0 LCS라는 2차원 배열을 이용하여 두 문자열을 행, 열에 매칭한다. 편의상 i, j가..
🟩 n개의 행렬을 연쇄적으로 곱할 때 최소의 기본 곱셈 횟수를 갖는 행렬의 곱셈 순서를 구하는 문제i x j 행렬과 j x k 행렬을 곱하기 위해서는 i x j x k 번 만큼의 곱셈이 필요하다.연쇄적으로 행렬을 곱할 때 어떤 행렬을 먼저 수행하느냐에 따라서 필요한 총 곱셈의 횟수가 달라진다.🟩 연쇄행렬행렬의 곱셈은 아래와 같이 결합법칙이 성립한다.A x (B x C) = (A x B) x C그러나, 행렬을 곱하는 순서에 따라 곱하는 횟수가 달라진다. 👉 즉, 연쇄행렬 최소곱셈 알고리즘은 행렬곱셈에서 곱하는 순서에 따라 곱셉의 횟수가 달라지는데 이러한 법칙을 이용하여 최소로 곱하는 횟수를 구하는 것이다. 연쇄행렬 최소곱셈 알고리즘 재귀관계식 ✨ 예제로 이해하면 쉽게 이해 가능!EX) A(20x1),..
EX) 몬스터 구조체에서 Attack 함수가 있다고 가정하면, 몬스터 A도 Attack 함수를 사용 가능하고, 몬스터 B도 같은 Attack 함수를 사용가능하다.👉 다수의 객체가 멤버함수를 공유하는 형태다만, 함수 호출시 객체의 정보가 전달이 되고, 이를 기반으로 함수가 실행되기 때문에 객체 안에 멤버함수가 존재하는 형태이다.객체가 생성되면, 멤버변수는 객체 내부에 존재하지만, 멤버함수는 메모리의 한 공간에 별도로 위치한다.이 함수가 정의된 클래스의 모든 객체가 이를 공유하는 형태를 가진다. 🟩 가상함수 테이블실제 호출되어야 할 함수의 위치정보를 담고 있는 테이블한 개 이상의 가상함수(virtual 함수)를 포함하는 클래스에 대해서는 컴파일러가 '가상함수 테이블'이라는 것을 만든다.매 함수호출시마다 ..
🌟객체의 주소값을 저장하는 객체 포인터 변수C++에서 AAA형 포인터 변수는 AAA 객체 또는 AAA를 직접 혹은 간접적으로 상속하는 모든 객체를 가리킬 수 있다.👉 객체의 주소값을 저장할 수 있다. EX) Person ⊃ Student ⊃ PartTimeStudentPerson * ptr = new Student();Person * ptr = new PartTimeStudent();Student * ptr = new PartTimeStudent(); IS-A 관계로 봐보자!"학생은 사람의 일종이다""근로학생은 학생의 일종이다""근로학생은 사람의 일종이다" 👉 하위 클래스 객체를 상위 클래스 객체로 바라볼 수 있는 증거"학생은 사람이다""근로학생은 학생이다""근로학생은 사람이다" EX2) 모든 클래..
29번 문제와 동일, time limit 1초 🍧 1트 (강의 풀이)자릿수마다 3이 등장하는 횟수 체크3보다 큰 경우, 같은 경우, 작은 경우로 분리#include #include #includeusing namespace std;int main(void){ //freopen("input.txt", "rt", stdin); int n, lt = 1, cur, rt, k = 1, cnt = 0; cin >> n; while(lt != 0){ lt = n / (k * 10); rt = n % k; cur = (n / k) % 10; if (3
🍧 문제 자연수 n이 입력되면 1부터 n까지의 자연수를 종이에 적을 때 각 숫자 중 3의 개수가 몇 개있는지 구하려고 합니다. 예를 들어, 1부터 15까지는 3, ~ 1, 3 ~ 으로 3의 개수가 2개이다. 🍧 입력 15 🍧 출력 2 🍧 1트 (강의 풀이) #include #include #include using namespace std; int main(void){ //freopen("input.txt", "rt", stdin); int n, tmp, digit, cnt = 0; cin >> n; for(int i = 1; i 0){ digit = tmp % 10; if(digit == 3) cnt++; tmp = tmp / 10; } } cout
🍧 문제 자연수 N이 입력되면 N! 값에서 일의 자리부터 연속적으로 0이 몇 개 있는지 구하는 프로그램을 작성하세요. 만약, 5! = 120 = 일의 자리부터 연속적인 0의 갯수는 1개이다. 만약, 12! = 479001600으로 일의 자리부터 연속적인 0의 갯수는 2개이다. 🍧 입력 12 🍧 출력 2 🍧 1트 (강의 풀이) 10이 얼마나 있는가? 를 확인하면 된다. 👉 10 = 2 * 5 이므로, 값을 소인수분해하여 2와 5의 갯수를 확인한다. #include #include #include using namespace std; int main(void){ //freopen("input.txt", "rt", stdin); int n, j, tmp; int cnt1 = 0, cnt2 = 0; cin >>..
✏️ 문제 임의의 N에 대하여 N!은 1부터 N까지의 곱을 의미한다. 이러한 큰 수를 표현하는 방법으로 소수들의 곱으로 표현하는 방법이 있다. 예를들어 825 = 0 1 2 0 1 로 표현가능한데, 이는 2는 없고, 3은 1번, 5는 2번, 7은 없고, 11은 1번의 곱이라는 의미이다. 이와 같이 변환하는 프로그램을 작성해보자. 🍧 입력 5 🎭 출력 5! = 3 1 1 ✨ 1트 (강의 풀이) 소수를 배열로 만들지, 만든다면 입력된 n까지의 소수의 갯수만큼 만들어야할지? 또 그렇다면, 그 만큼 소수판별기를 굴려서 해야하는데 이게 효율적이지 않은 것 같음. n까지의 모든수를 배열로 만드는 것 같진 않음. 소수만 카운팅해야하니까. 어떻게 풀어야할지 판단이 안서서 강의풀이를 보기로 하였다. 강의풀이 👉 배열을 ..
장거리 달리기 대회가 진행되어 모든 선수가 반환점을 넘었다. ~ 선수들은 자신이 앞으로 얻을 수 있는 최선의 등수를 계산할 수 있다. 각 선수의 평소 실력은 정수로 주어지는데, 더 큰 값이 더 좋은 실력을 의미한다. 더 큰 수를 갖고 있는 사람만 앞지르기 가능하다. 선수들의 평소 실력을 현재 달리고 있는 순서대로 입력 받아 각 선수의 최선의 등수를 계산하는 프로그램을 작성하시오. 입력82 8 10 7 1 9 4 15 출력1 1 1 3 5 2 5 1 1트 (80점)5가지 경우 중 1가지 경우에서 타임리밋👉 vector의 크기를 n+1로 설정해야 1부터 데이터 init을 할때, 오류가 발생하지 않는다!#include #include using namespace std;int m..
N명의 학생의 수학점수가 입력되면 각 학생의 석차를 입력된 순서대로 출력하는 프로그램을 작성하세요. 입력 첫 줄에 N이 입력되고, 두 번째 줄에 수학점수를 의미하는 N개의 정수가 입력된다. 같은 점수가 입력될 경우 높은 석차로 동일 처리한다. 즉 가장 높은 점수가 92점인데, 92점이 3명 존재하면, 1등이 3명이고, 그 다음 학생은 4등이 된다. 점수는 100점이 만점이다 출력 첫 줄에 입력된 순서대로 석차를 출력한다. 1트 (성공) #include #include using namespace std; int main(void){ //freopen("input.txt", "rt", stdin); int n; cin >> n; vector a(n); vector b(n); for(int i = 0; i ..
🟩 기존에 정의해 놓은 클래스의 재활용을 목적으로 만들어진 문법적 요소 좋은 코드는 요구사항의 변경 및 기능의 추가에 따른 변경이 최소화되어야 한다. 그리고 이를 위한 해결책으로 상속이 사용된다. class Person { private: int age; char name[50]; public: Person(int myAge, char * myName) : age(myAge){ } void WhatYourName() const { } void HowOldAreYou() const { } } class Student : public Person { // Person 클래스를 public 상속함 private: char major[50]; public: Student(char *myName, int myAg..