전체 글 224

[백준] 9012번: 괄호

https://www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 문자열 파싱 비슷한 문제이다. 스택을 사용해서 괄호를 넣었다가 빼는 동작으로 최종적으로 스택이 비어있지 않으면, 괄호가 짝이 안맞는다는 말이므로 NO를 출력하면 된다. 다음과 같은 규칙으로 구현했다. 1. '(' 이면 스택에 넣는다. 2. ')' 이면 스택에 '(' 이 있는지 확인한다. a. 스택이 비었다. -> push()한다. b. 스택 탑이 ')' 이다 -> p..

[C] Visual Studio 간단 디버깅

switch 문 a엔 정수상수, 변수식 가능 case에는 상수식, 상수 가능 (변수, 변수식 불가능) for문 for(초기화식; 조건식; 후처리식){ } 초기화식은 for문 도입부에서 한번만 실행된다는 점 주의! Visual Studio 디버깅 라인 바이 라인으로 코드를 확인하기 위해, 라인 바이 라인 디버깅 가능 F10 을 누르면 되고, F10을 누를 때마다 다음 실행 줄로 넘어가며, Shfit + F5를 누르면 디버깅 중단된다. breakpoint 특정한 부분으로 바로 가기 위해서는 breakpoint를 설정해서 F5를 눌러 실행하면 된다. breakpoint는 해당 부분에 오른쪽 마우스 클릭, 중단점 설정 을 누르면 된다. Watch window (조사식) 보통 아래 창에 떠있다. 조사식에서 원하는..

언어/C&C++ 응용 2021.08.05

[C] 난수 발생

int rand(void) 는 C에서 기본적으로 제공되는 난수발생 함수이다. 0부터 RAND_MAX 까지의 수 중에 난수가 발생한다. 이 함수는 seed를 이용해서 난수를 발생시키는데, 처음에 srand 함수로 특정한 값으로 초기화 된다. 일정 범위 내의 난수를 발생시키기 위해서는 modulo 연산을 주로 사용한다. v1 = rand() * 100 // 0~99 까지의 난수 발생 v2 = rand() %100 + 1; // 1~100까지의 난수 발생 v3 = rand() % 30 + 1985 : 1985 ~2014 까지의 난수 발생 하지만 modulo 연산을 통해 특정 범위의 난수를 발생시키면 완전히 분산된 난수를 발생시키지는 못한다. c++ 사용 설명서에 나오는 예시를 보면 /* rand example..

언어/C&C++ 응용 2021.08.03

[C] LNK1168 에러

프로젝트를 빌드 후 실행을 시키려고 하는데 LNK1168: 프로젝트명.exe을(를) 쓰기용으로 열 수 없습니다. 라는 에러가 떴다. 이 에러는 이미 이 exe 파일이 실행되고 있으면 발생하거나, 백신 프로그램이 실행을 막았거나, 디렉토리 권한의 문제일 수 있는데, 1. 백신 프로그램을 끈다. -> 안됨. 근데 백신 프로그램이 내 프로젝트 실행을 막을 수 있으므로 꺼놓기 추천 2. 디렉토리 권한 변경 속성 > 읽기전용에 V 자로 체크되어 있으면 해제 -> 역시 되지 않음 3. 이미 실행중 작업 관리자에 보면 백그라운드 프로세스에 콘솔창이 떠있는게 있을 수도 있고, 사용자로 들어가서 돌고 있는 프로세스 중에 있을 수도 있고 세부 정보에 떠있을수도 있다. 그래도 못찾겠다면 cmd로 들어가서 tasklist 라..

언어/C&C++ 응용 2021.08.03

[C] Visual Studio scanf 해결

error C4996 'scanf'에 에러가 뜨는 경우가 있다. Visual Studio에서 SDL 검사를 하면서, scanf 가 보안 취약점이 있으니 scanf_s 를 사용하라고 강요(?) 한다. 에러에서 _CRT_SECURE_NO_WARNINGS를 사용하라고 추천해준다. 이 문제를 해결하는 덴 여러 방법이 있다. 1. 추천한대로 scanf_s를 사용해도 된다. scanf_s("%d", &n, sizeof(n)); 인자는 차례대로, 포맷 스트링, 변수 주소, 변수의 사이즈이다. stack overflow를 방지하기 해서 크기를 받는다. 2. _CRT_SECURE_NO_WARNINGS를 사용한다. 코드 위에 #define _CRT_SECURE_NO_WARNINGS 를 추가해준다. 3. SDL 검사를 끈다..

언어/C&C++ 응용 2021.08.02

8. Dynamic Programming

동적 계획법이란? 메모리를 사용해 수행시간의 효율성 향상시키는 방식 이미 계산된 결과를 별도의 메모리 영역에 저장해서 다시 계산하지 않도록 한다. Top-Down 방식과 Bottom-Up 방식(전형적) 두 가지가 있다. - Dynamic Allocation에서 dynamic(실행 도중에 해결하는 방식)과 무관한 명칭이다. 조건 Optimal Substructure (최적 부분 구조) Overlapping Subproblem (중복되는 부분 문제) 예시 Fibonacci 수열 a₁ = 1, a₂ = 1 이고, a_n = a_n-1 + a_n-2 이라는 점화식으로 표현할 수 있다. 재귀함수를 사용해서 풀 수 있는 문제인데, 여기서 이 수열의 계산값들을 배열이나 리스트로 저장해두면 더 빠르게 해결 가능하다. ..

[C++] ENUMS, Constructor, Destructor

ENUMS 값에다가 이름을 붙여주는 것 어떤 상태 같은 것을 지정할 때 유용하게 사용된다. int A = 0; int B = 1; int C = 2; int main(){ if(val==A){ // whatever }else if(val==B){ // whatever } } 위와 같이 만들어도 되지만 이렇게 할 경우, 매우 복잡하고, 또 각 지정값의 변동 가능성도 있다. enum Example{ // 기본적으로 int형으로 0, 1, 2... 이런식으로 배정이 된다. A, B, C; // can align numbers to each names too D=4; }; enum Example2: float{ // 이렇게 특별히 type을 지정해줄 수 있긴 하다. F=7.2; E=4.5; }; int main..

언어/C&C++ 기본 2021.07.02

[C++] Static

Static의 의미 1. class 밖에 선언된 static: means linkage to the symbol would be static. translation unit에서만 visible할 것 2. class 안: 그 변수가 모든 그 class의 instance 들에 의해 공유될 것 1. class밖에 선언된 static static int s_Var (s_는 conventionally 사용되는 static var 표시) 컴파일러는 이 translation unit에서만 static 요소의 정의를 찾으려 할 것이다. 예를 들어서 두 개의 소스파일에 각각 s_Var이라는 변수를 static하게 선언하면 문제없이 컴파일된다. 하지만 한 소스파일 (혹은 두 소스파일 모두) s_Var 변수에 static선..

언어/C&C++ 기본 2021.07.01

[백준] 1152번: 단어의 개수

https://www.acmicpc.net/problem/1152 1152번: 단어의 개수 첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 www.acmicpc.net #include #include using namespace std; int main(void){ string s; getline(cin, s); int count = 0; for(int i = 0; i

[백준] 1157: 단어 공부

https://www.acmicpc.net/problem/1157 1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net alphabets[]라는 배열을 만들어서, 여기 a는 0, b는 1에 각 문자가 반복되는 횟수를 저장했다. 관건은 답을 프린트하는건데, alpahbet배열을 traverse 하며, biggest라는 int 값을 통해 가장 큰 횟수를 저장하고, 그 횟수에 해당하는 알파벳과 반복 횟수를 pair로 만들어서 벡터에 넣었다가, 만약 그거보다 큰 횟수의 알파벳이 있으면 answer 벡터를 비워버리고 새로운 알파벳 pair를 저장했다. 이렇..