전공

아래 내용들은 'c++로 쉽게 풀어쓴 자료구조 (천인국,최영규)' 책을 읽으며 개인적으로 공부하며 정리한 것입니다. 잘못된 점이 있으면 고치겠습니다. Chapter03 Stack (스택) Stack (스택) : 후입선출(Last In First Out)의 접근 방법을 유지하는 요소들의 모음 기능 push(x) : 주어진 요소 x를 스택의 맨 위에 추가한다. pop() : 스택이 비어있지 않으면 맨 위에 있는 요소를 삭제하고 반환한다 isEmpty() : 스택이 비어있으면 true를 아니면 false를 반환한다 peek() : 스택이 비어있지 않으면 맨 위에 있는 요소를 삭제하지 않고 반환한다 ifFull() : 스택이 가득 차 있으면 true를 아니면 false를 반환한다 size() : 스택 내의 모든..
풀이1 (내풀이) 공백이 있는 경우 이에 대한 조건을 만들기가 까다로웠음 if (str[i][j] != NULL) 인 코드로 하려 했는데, 이는 오류이다 '\0' 은 NUL문자이고 NULL 은 NULL포인터 이므로, NULL 포인터는 포인터변수를 초기화할때 사용한다. 따라서 아래 코드와 같이 j > str[i]; for (int j = 0; j < 15; j++) { for (int i = 0 ;i < 5; i++) { if (j < str[i].length()) //이 조건을 생각하기에 힘들었음..
전공평점 = 학점x과목평점 (P는 계산에서 제외) 풀이1 (내풀이) cout credit >> grade; if(grade == "P") continue; sumCredit += credit; if(grade == "F") continue; if(grade[0] == 'A') temp = 4; else if (grade[0] == 'B') temp = 3; else if (grade[0] == 'C') temp = 2; else temp = 1; if (grade[1] == '+') temp += 0.5; res += credit * temp; } cout
단계별로 풀어보기 - 1316 https://www.acmicpc.net/problem/1316 풀이1 (내 풀이) 그룹단어수 이면, 이를 카운트하는 함수 : consider() 그룹단어인지 여부 판단 함수 : isGroupWord() isGroupWord() 함수 : happy -> hapy -> 버블정렬의 비교 부분을 적용해 중복된 문자 있는지 확인. 중복된 문자가 있으면 return false, 중복된 문자가 없으면 return true #include #include #include using namespace std; /* * 그룹 단어 : 한 단어열에서 특정 문자가 연속해서만 나타나야하는 단어 * vector 로 문자열을 n개 받고 * 그룹 단어 세어 결과값 반환하는 함수 -> consider..
백준 -단계별로 풀어보기 - 2941 https://www.acmicpc.net/problem/2941 풀이1 (내 풀이) 1) - 가 있는 경우 2) = 가 있는 경우 3) j 가 있는 경우 각각에 대해 if 조건문으로 n (단어 길이) 에서 1 혹은 2씩 감소시킨다. #include #include using namespace std; /* * 제시된 9개의 크로아티아 알파벳 제외 나머지 알파벳은 정상적으로 세는 것다. * = 이 붙은 것은 dz=인 경우 (-2) 이를 제외하고 (-1) * - 이 붙은 것은 언제나 (-1) * */ int main() { cin.tie(NULL); ios_base::sync_with_stdio(false); string s; cin >> s; int n = s.len..
풀이1 (내풀이) 입력 단어의 길이가 1,000,000 이하 이므로, int alphabet[26]으로 설정해야한다. char alphabet[26]으로 설정하면 각 문자당 127개까지만 셀 수 있다. 'A'가 65, 각 소문자는 대문자에 +32 한 것을 활용해서 대문자 기준으로 각 알파엣의 index를 설정하였다. 처음에 aabc 반례를 못 찾아서 계속 '틀립니다'가 떴다. 이를 위해 break;를 없앴다. #include #include #include using namespace std; /* * alphabet[26] 배열은 소문자, 대문자 구분안한 알파벳 각각의 개수 * A = 65 (아스키코드)를 이용, a = A + 32 임을 이용 * 문자열 각각의 문자 하나씩 보면서 alphabet 의 값..
ios_base::sync_with_stdio(false) : c의 sdio와 c++의 iostream의 동기화를 비활성화 한다. 평소에는 서로 동기화 상태이다. 즉, c++에서 c와 c++ 각각의 스타일로 입출력을 받아도 서로 동기화해 우리가 입력/출력하고자 하는 순서대로 결과를 얻을 수 있다. 이는 c와 c++이 동일한 버퍼를 공유하기 때문이다. 하지만 위 코드를 사용하면, 동기화를 비활성화하고, c++ 스타일 코드만 사용할 때, 기존 동기화 과정에서 필요하던 시간이 절약되어 입출력속도가 빨라지는 효과가 있다. 즉, 시간을 절약할 수 있다. 다만, 비동기화 하였으므로 c 의 입출력 (scanf, printf, getchar)을 사용할 경우 오류가 발생한다. cin.tie(null) : 입력과 출력의 ..
풀이1 (내 풀이) string의 가운데 인덱스를 기준으로 양 옆의 문자가 같으면 continue, 다르면 break후 0을 출력한다 이때, 가운데 인덱스의 기준이 string의 길이가 홀수, 짝수인 경우가 다르므로 이를 고려하여 가운데 인덱스를 정한다. #include #include using namespace std; /* * string의 길이가 홀수인 경우 * 가운데 문자의 인덱스 k 부터 시작하여 for문으로 arr[k-i] == arr[k+i]인지 확인후 i++ 하여 한번이라도 아니면 멈추고 0을 출력한다. * string의 길이가 짝수인 경우 * string 길이 반 = k 라 하여 for문으로 arr[k-i] == arr[k+1+i]인지 확인후 i++하여 똑같이 시행한다. */ int m..
코딩신생아(0o0)
'전공' 카테고리의 글 목록 (3 Page)