기존의 템플릿 인자를 우리는 이렇게 하나만 사용했다. 하지만 두 개라면 어떨까? 배열의 예시를 보자면, 현재 T_SIZE를 컴파일 이전에 기입했기에, 이를 코드로 구현했다. 전의 13-(1) 템플릿 포스트를 보면, 헤더 파일의 print() 내용들을 다른 cpp에 옮겨넣었다. 그 때 명시를 해줘야한다했다. 하지만 지금의 사례는? 명시하기가 힘들다. 라 할 때, a에 들어갈 수가 무한정이기 때문에 일일이 해주기가 힘들다. 그래서 이럴 땐 그냥 맘 편하게 cpp로 따로 분리하기 보다는 그냥 헤더파일에 넣는다. template은 모든 경우에 적용되게 설정했다. 그런데, 예를 들어 T가 char인 경우는 따로 작동하게 하고 싶어요! 라면 어떻게 해야할까? 특별한 경우를 조건으로 걸어줘야겠지. 이 경우를 spec..
https://www.acmicpc.net/problem/1120 1120번: 문자열 길이가 N으로 같은 문자열 X와 Y가 있을 때, 두 문자열 X와 Y의 차이는 X[i] ≠ Y[i]인 i의 개수이다. 예를 들어, X=”jimin”, Y=”minji”이면, 둘의 차이는 4이다. 두 문자열 A와 B가 주어진다. 이때, A의 www.acmicpc.net 사고과정) 1. 배열의 갯수 차이만큼 A배열을 한칸씩 밀어가면서 비교한다. 2. 비교하는 과정 한 번 거칠 때마다 총 몇 개가 겹치지 않았는지 파악. 가장 최소 수 구하라는 건 결국엔 빈칸을 채워넣는 곳은 그냥 B배열과 같다라고 가정하고 하면 된다. 그림그려가면서했다.. #include #include using namespace std; int main()..
https://www.acmicpc.net/problem/1065 1065번: 한수 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 www.acmicpc.net 사고과정) 한자리랑 두자리 수는 생각해보니 다 한수이다. 그러면 결국은 세자리 수일 때인데, (100자리 - 10자리) == (10자리 - 1자리)를 확인해보면 된다. #include #include using namespace std; int main() { int N; cin >> N; int count = 0; for (int i = 1; i
함수의 형태는 동일한데, 자료형이 계속 달라서 저렇게 함수들을 일일이 만드는 것은 노가다에 불과하다... 모든 자료형에 적용되는 것이 없을까? 해서 나온게 Template 이다. template으로 주로쓴다. template을 써도 같은 동작을 한다. 클래스의 객체를 활용하려면, 연산자를 오버로딩해줘야한다. _____________________________________________________________________________________________________________________________ 현재 m_data 동적배열에 아무 자료형을 넣기 위해 T로 해주었다. operator [] 의 경우 return type 역시 아무자료형이 나와야하므로 T로 해줬다. 이 경우, ..
reference로 받아들였으니, 정상적으로 derived의 객체로 출력되고 있다. 하지만 ref가 아닌, 그냥 value로 받아버리면, 값을 복사하는 것이기 때문에 Base가 Derived 보다 크기가 작으므로 Derived의 차집합 부분이 짤림이 발생한다. 그렇기에, 오버라이딩이 되지 않은 채 Base가 출력되버린다. doSomething 함수를 보면 얘도 인자로 엄연히 reference로 받고 있기 때문에, Derived에 맞게 출력된다. 하지만 value로 받게 되면? 아까처럼 Base로 출력된다. 이건 유의점인데, vector를 활용할 경우 vector에선 &, 즉 reference를 활용할 수 없다. 그렇기에 단순히 vector로 할 경우 아까처럼 value로 처리되기 때문에 잘림현상이 발생한..
내가 배운 언어라고는 현재 C와 C++ 문법 정도이다. 흔히 말하는 웹 백엔드로 가려면, 이제 java를 배우면서 프레임워크를 배워야한다. C++을 배웠으니, java로 입문이 확실히 수월할 듯 싶긴한데, 요즘 드는 고민은 이렇다. 내가 단순히 일자리가 많으니 백엔드로 가려하는 것이 맞을까? 백엔드를 갈까 고민했던 건 말 그대로 수요가 많아서 가려했던 것 뿐인데.. 과연 내가 뭔가 흥미를 느끼려고 하는 것일까? 싶은 의문이 들었다. 컴퓨터 분야는 정말 넓고 무궁무진하다. 분야가 너무 다양해서, 흔히 말하는 한 곳만 파는 것도 힘들다. 내가 취업이 정말 급박한 4학년 막학기도 아니고, 2학년 2학기인데 지금은 조금 더 경험이 맞지 않나 싶다. 내가 헛발질을 하는 것이 아니니까. 그러다가 한 번 게임 쪽 공..
10월 중순부터 시작해서, 하루에 2문제 이상씩은 풀려 노력했던 것 같다. 중간 시험보기 하루 이틀 전을 제외하고는 꾸준히 푼 것 같다. 백준 문제마다 같은 티어여도 난이도가 천차만별이라 평하기가 좀 그렇긴한데, 아직 나의 실력은 딱 브1~실5인것 같다. 브론즈1이나 실버5 문제들은 20분내로 사고 떠올리고 코드 작성하는 게 되는 것 같은데 그 이상 레벨들은 아직 무서워서 풀질 못했다.. 자료구조나 알고리즘을 조금 더 배워야 풀 수 있는 문제들이 많아서 우선은 한동안은 브론즈~실버5 위주 문제들을 풀면서 따로 자료구조와 알고리즘 책 구매한 걸 공부해보며 그 이상 난이도 접근해보려한다. C++로 다 구현하고 있는데, 내가 제대로 구현할 수 있는 언어가 C++ 밖에 없기도 하고.. 나중에 코테 가서도 C++..
https://www.acmicpc.net/problem/1439 1439번: 뒤집기 다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만들려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모 www.acmicpc.net 처음에 무슨 소리인가 싶어서 5분간 예제 보면서 고민하다가 내린 결론은 간단했다. 같은 문자가 쭉 가다가 한번 다른 문자가 나오면 그 횟수를 카운트해서, 가장 적은 횟수를 출력해주면 되는 거였음. #include #include using namespace std; int main() { string input; cin >> input; int zero = 0, one = 0; for (int i..