01.(문제를 잘 이해한 게 맞는지 모르겠다.)// 책에 서술된 대로 구현#include #include using namespace std;int cnt;void print(const string* s, int n = 0){ if (n == 0) { cnt++; cout > "; cout > "; cout 결과02.// 책에 서술된 대로 구현#include #include using namespace std;struct CandyBar{ string maker; double weight; int calories;};void SetCandyBar( CandyBar& candyBar, const char* ca..
문제 링크17478 재귀함수가 뭔가요?접근우선 어제 배웠던 3단계 방식을 토대로 차례대로 접근하였다.함수 원형 설정base condition 설정재귀 식 구현1. 함수 원형 설정출력만 하는 것이므로 void 형, 또 횟수를 받아야 할 것 같아서 매개변수를 int n으로 줬다.void Solve(int n);2. base condition 설정 함수가 어떤 조건에서 멈출지 생각해 보았는데, n을 1씩 증가시킬 때 n이 사용자가 입력한 수가 되면 "재귀 함수가 뭔가요?"에 대한 질문을 하고 거기서 함수를 다시 호출하지 않고 답변을 하는 것을 볼 수 있다. 따라서 n == N일 때, 답변하고 끝마무리까지 하고 return 하게끔 설정했다.3. 재귀 식 구현void Solve(int n){ // 질문 if..
문제 링크9466 텀 프로젝트 접근문제를 읽고 사이클을 구하면 되는 문제인 걸 알아챘으나 사이클을 어떻게 찾는지는 몰라서 풀지 못했다. DFS로 풀면 될 것 같았는데, 어찌저찌 해 보다가 8 %에서 막혔다.사이클 찾는 문제도 dfs, bfs처럼 약간 공식 같은 무언가가 있을 것 같아서 찾아보았다.done 배열먼저 visted, map과 더불어 done 배열이 새로 등장하였다. 이 done 배열은 해당 노드들이 사이클이 맞는지 체크하는 배열이었다.이 방법을 활용하여 문제를 다시 풀어보았다.코드#include #include using namespace std;const int MAX = 100000 + 1;int n, cnt;int students[MAX];bool visited[MAX];bool done..
friend 함수C++에서 클래스의 private 및 protected 멤버에 접근할 수 있도록 특별히 허용된 함수이다. 이를 연산자 오버로딩에 활용할 수 있다.왜 friend 함수가 필요할까?일반적으로 연산자 오버로딩은 멤버 함수 또는 비멤버 함수로 구현된다.멤버 함수로 오버로딩할 경우 연산자 왼쪽에 있는 객체가 반드시 해당 클래스의 객체여야 한다.예)// 왼쪽: 객체, 오른쪽: 객체Point(3, 4) + Point(3, 5) 하지만 비멤버 함수로 오버로딩할 경우 클래스의 비공개 멤버에 접근하려면 friend 키워드를 사용해야 한다.// 왼쪽: 클래스 객체가 아님, 오른쪽: 객체3 + Point(3, 4)3 + point(3, 4)객체가 아닌 기본 자료형(예: int)도 Point 클래스의 frien..
본 풀이는 제가 공부하면서 작성한 것이므로 정답이 아닐 수도 있습니다. 01.// 쌍을 이루는 두 수를 반복해서 입력할 것을 사용자에게 요구하는 프로그램// 두 수 중 적어도 어느 하나가 0으로 입력될 때까지 입력은 계속됨#include using namespace std;float HarmonicMean(int x, int y){ float a = static_cast(x); float b = static_cast(y); return 2.0f * a * b / (a + b);}int main(){ int m, n; cout > m >> n)) { cout 결과01 - 1. cin.ignore(100, '\n')의 의미더보기 입력 스트림에..
함수 원형은 컴파일러에게 함수의 인터페이스를 알려 준다. 즉, 리턴값이 있으면 그 리턴값의 데이터형을 컴파일러에게 알려 준다. 또한 매개변수의 개수와 각 매개변수의 데이터형을 컴파일러에게 알려 준다. 예double cube(double x);int main(){ double volume = cube(side);} 1.함수 원형은 cube()가 하나의 double 형 매개변수를 가진다는 사실을 컴파일러에게 알려 준다. 프로그램이 cube()에 매개변수를 제공하는 데 실패하면, 컴파일러는 함수 원형에 근거하여 에러를 검출한다. 2.cube() 함수는 계산을 끝냈을 때 리턴값을 CPU의 레지스터나 메모리의 어떤 지정된 위치에 넣는다. 그러면 호출한 함수가 그 위치에서 값을 꺼내온다. cube()가 doubl..
문자와 for문for(ch = 'a'; ch strcmpASCII 코드에서는 대문자가 소문자보다 코드가 낮기 때문에 조회 순서가 더 빠르다. 따라서 이런 것도 가능하다.// str1이 str2보다 아스키 코드 상 앞 순번의 문자열인지strcmp(str1, str2) 0cinint n;cin >> n; 이 경우에 사용자가 수를 입력하는 대신 단어를 입력하면 무슨 일이 벌어질까?n의 값은 변하지 않는다.입력 큐에 잘못된 입력이 그대로 유지된다.cin 객체의 에러 플래그가 설정된다.cin 메서드 호출이 false를 리턴한다.cin 메서드가 false를 리턴한다는 사실은, 수를 읽어들이는 루프를 종료시키기 위해 수가 아닌 입력을 사용할 수 있다는 것을 의미한다. 예// 숫자 말고 다른 문자 입력시 루프가 멈춤..
재귀 함수 문제를 풀기 전에다음과 같은 세부 사항을 잘 정리해나가면 푸는 데에 많은 도움이 된다. 1. 함수의 정의2. base condition3. 재귀 식문제 링크[1074 Z] 접근딱 봐도 반복되는 모양을 보아하니 재귀를 쓰면 알맞을 것 같았다. 하지만 재귀 함수를 써야 한다는 건 알아도 어떻게 써야 하는지는 잘 몰랐기 때문에 위의 세부 사항을 정리해 보았다. 1. 함수의 정의직관적으로 정의하면 된다.// 2^n * 2^n 배열에서 (r, c)를 방문하는 순서를 반환하는 함수int func(int n, int r, int c) 2^n이 int 범위 안에 들어오는지도 신경을 써야 한다. 문제에서 n이 15 이하라고 했으니 범위에 잘 맞다.2. base conditionif(n == 0) return..