반응형

여기서 주의 할 점...

stack에 push된 게 없는 경우 top()이 호출되면 segmentation fault가 발생한다. 

그래서  if( !s.empty() )조건을 주고 s.top()함수를 호출하도록 추가했다. 여기서 많이 해맸는데, 좀더 좋은 방법이 있으신분은 댓글로 답변 부탁드립니다.

 

#include <iostream>
#include <stack>
#include <string.h>

using namespace std;

int main()
{
	int n=0,i = 0, count = 0;

	stack<char> s;
	char input[200];


	while( fgets(input, sizeof(input), stdin ) != NULL )
	{
		count = 0;
		if(input[0] == '.' ) break;

		for( i=0; i < strlen(input); i++)
		{
			if( input[i] == '(' || input[i] == '[' )
			{
				s.push( input[i] );
				//cout << "stack : " << s.top() << endl;
			}
			else if( input[i] == ')' || input[i] == ']' )
			{
				if( s.empty() ) 
				{
					count++;
					break;
				}
				else if( !s.empty() )
				{
					if( s.top() == '(' && input[i] == ')' )
					{
					//	cout << "stack is : " << s.top() << endl;
						s.pop();
					}
					else if( s.top() == '[' && input[i] == ']' )
					{
					//	cout << "stack is : " << s.top() << endl;
						s.pop();
					}
					else if( s.top() == '(' && input[i] == ']' )
					{
						count++;
						break;
					}
					else if( s.top() == '[' && input[i] == ')' )
					{
						count++;
						break;
					}
					else
					{
						count++;
						break;
					}
				}

			}
		}

		if( s.empty() && count == 0 )
			cout << "yes\n";
		else 
			cout << "no\n";

		if( !s.empty() )
		{
			//cout << "Stack is not empty!!" << endl;
			while( !s.empty() )
				s.pop();

			//cout << "Stack size is !!" << s.size() << endl;
		}
	}

	return 0;
}
반응형

'Algorithm' 카테고리의 다른 글

[c++]baekjoon 9012  (0) 2021.04.04
[c++]baekjoon 10773  (0) 2021.04.04
[c++]baekjoon 10828  (0) 2021.04.04
[c++]stack 사용  (0) 2021.04.02
thread  (0) 2019.03.01
반응형

C++ stack에서 사용할 수 있는 함수들입니다.  

C++ Stack

#include <stack>
stack<int> s;
s.push(a);  값을 stack에 집어 넣기 
s.pop(); 값을 스택에서 하나 빼오기 
b=s.top(); 스택 가장 위쪽 값 
s.empty(); 값이 비어 있는 지 여부를 확인 할 수 있다.
s.size(); 스택에 저장된 데이타 크기 

http://www.cplusplus.com/reference/stack/stack/

stack을 사용한 예제 입니다.

#include <iostream>                                                                                                                                                                                        
#include <stack>

using namespace std;

int main()
{
    int test;
    char aa; 

    stack<char> s;

    s.push('a');
    s.push('s');
    s.push('x');
    s.push('k');
    s.push('p');

    while( !s.empty()  )
    {   
        cout << s.top();
        s.pop();
    }   
    return 0;
}

실행 결과 : pkxsa

반응형

'Algorithm' 카테고리의 다른 글

[c++]baekjoon 9012  (0) 2021.04.04
[c++]baekjoon 10773  (0) 2021.04.04
[c++]baekjoon 10828  (0) 2021.04.04
[c++]baekjoon 4949  (0) 2021.04.03
thread  (0) 2019.03.01
반응형

program이란 단순 코드를 의미할 수도 있고, 일반적으로 특정 디바이스에서 동작하는 앱을 프로그램이라고 통상적으로 얘길 한다.

processor는 cpu와 기타 기능을 포함하는 HW를 말하며 process는 실행 중인 program을 의미한다.

processor에는 전역변수, 열린 파일, 시그널, 주소공간 그리고 하나 이상의 실행중인 thread등을 포함한다.

thread는 process 안에 있는 활동을 가진 객체를 지칭하며 각 thread는 고유 PC(Program Counter), Stack 그리고 process register를 갖는다.

커널은 프로세스가 아닌 각각의 thread를 scheduling 한다.



gcc thread.c -o thread -lpthread

 1 #include <pthread.h>
  2 #include <stdio.h>
  3 #include <stdlib.h>
  4 #include <unistd.h>
  5
  6 void *firstThreadRun()
  7 { 
  8    while(1)
  9    { 
 10       sleep(1);
 11       printf("start first thread\n");
 12    }
 13    return 0;
 14 }
 15
 16
 17 void *secondThreadRun()
 18 { 
 19    while(1)
 20    { 
 21       sleep(3);
 22       printf("start second thread\n");
 23    }
 24    return 0;
 25 }
 26
 27
 28 int main(void)
 29 { 
 30    pthread_t firstThread, secondThread;
 31    int threadErr;
 32
 33    if(threadErr = pthread_create(&firstThread, NULL, firstThreadRun, NULL))
 34    { 
 35       printf("thread error= %d", threadErr);
 36    }
 37
 38
 39    if(threadErr = pthread_create(&secondThread, NULL, secondThreadRun, NULL))
 40    { 
 41       printf("thread error= %d", threadErr);
 42    }
 43
 44    while(1);
 45    return 0;
 46 }


output

start first thread
start first thread
start second thread
start first thread
start first thread
start first thread


반응형

'Algorithm' 카테고리의 다른 글

[c++]baekjoon 9012  (0) 2021.04.04
[c++]baekjoon 10773  (0) 2021.04.04
[c++]baekjoon 10828  (0) 2021.04.04
[c++]baekjoon 4949  (0) 2021.04.03
[c++]stack 사용  (0) 2021.04.02
반응형

1. overview

C 발생 과정

ALGOL60 → CPL → BCPL → B → C


①ALGOL60 : 1960년 국제위원회에서 개발한 언어로서 FORTRAN보다 세련된 과학 계산용 언어이나 추상적인 언어이어서 소프트웨어 개발용으로는 적절하지 못하다.

②CPL(Combined Programming Language) : 1963년 런던 대학과 캠브리지 대학에서 공동으로 개발한 언어이며 ALGOL60의 추상적인 부분을 보완하기 위해 개발한 언어이나 명령어가 많고 사용하기 어려운 형태로 되어있다.

③BCPL(Basic CPL): 1967년 캠브리지 대학의 마틴 라챠드 교수가 개발했으면 CPL을 좀 더 쉽게 표현하고자 나온 언어로서 명령을 간단한 형태로 구사할 수 있게 만들었는데 특정 문제 처리 가능한 제한적 언어이다.

④B : 1970년 벨 연구소의 Ken Thompson이 개발한 언어이며 하드웨어 제어 프로그램까지도 가능하나 포인터와 주소 연산을 지나치게 많이 사용하여 프로그램 작성하기 어렵다.

⑤C : 1973년 벨 연구소의 Dennis Ritchie가 개발한 언어로 프로그램 작성도 쉬우며 기능도 막강한 언어이다.

특징

고급 언어이면서 저급 언어의 특성을 모두 가지고 있다.

풍부한 연산자를 가지고 있다(약 40개)

구조화되었다.

간결하고 일관된 데이타 처리가 가능하다.

동적 처리가 가능하다.

호환성이 강하다.

컴파일러 종류

ANSI C, VAX C, TURBO C, BORLAND C,  MS C,LATTICE C,INSTANT C,RUN C,UNIX C

2. basic

C언어에서 사용되는 문자

①영문자 : a~z A~Z
②숫자 : 0~9
③특수문자 : keyboard상에서 영문자와 숫자를 제외한 나머지 문자(! @ # $ * ^ + - & % > < ~ / \ ? ; " = ( ) : , { } _ | [ ]…)

예약어

어떤 의미를 지니고 있는 단어들이며 사용자 정의 명칭으로 사용할 수 없다. 예약어들은 모두 소문자이다.


(1)기억류 예약어

auto

register

static

extern

(2)제어문 예약어

goto

if ~ else

switch ~ case

for

while

do ~ while

break

continue

return


(3)자료형 예약어

char

int

short

long

unsigned

float

double

struct

union

enum

void

(4)기타 예약어

sizeof()

typedef

사용자 정의 명칭

프로그램  작성 시 사용자가 임의로 만들어서 사용하는 이름을 말하며 레이블, 변수, 매크로, 형, 배열, 구조체, 공용체, 함수 등의 이름을 정의 명칭입니다.

[규칙]

영문자와 숫자의 조합으로 만든다

첫 글자는 숫자가 올 수 없다.

특수 문자는 사용할 수 없으며, 단 under score(_)만 사용 가능하다.

문자 사이에 공백을 둘 수 없다.

예약어는 사용할 수 없다.

대문자와 소문자는 다른 문자로 취급한다.

글자 길이 제한은 컴파일러마다 차이가 있으나 일반적으로 32자까지 가능하다.



3. data type

자료형은 크게 상수(constant)와 변수(variale)가 있다.


상수

고유한 의미나 크기를 가지고 있는 변할 수 없는 값을 말하며 아래 종류가 있다.



기본형















 

 산술형















 문자형

 하나의 글자,' '속에 기재, 2Bytes차지하며 하위 1byte에 표현됨

일반문자 : 'A'  제어문자:'n', 'r', '\a', '\f', '\b', '\t'

 char(-128~127)

 %c

 unsigned char(0~255)

 %c

 문자열형

 하나 이상의 글자, 따옴표(" ")에 기재, 문자열 상수 마지막에 NULL이어서 memory상에 문자열수 보다 1byte 더 크다.

 

 %s

  정수형

소수점이나 지수가 없는 수

10진수(11),8진수(013),16진수(0xB) 등으로 표현

 short

 %hd

 int

 %d

 long

 %ld

 unsigned short
 %hu
 unsigned int

 %u

 unsigned long

 %lu

 실수형

 소수점이나 지수가 있는 수

(실수의 맨 뒤에 f가 붙어있다면 float, l이 붙어있다면 long double, 아무것도 붙어있지 않다면 double입니다.)

1.98f(float),  5.98283l(long double), 3.782e+12(double)

 float %f %e %g
 double%f

 long double

 %Lf
 나열형

 enum 이름{상수1, 상수2, ....}

enum 이름{상수1=값1,상수2 = 값2, ...}

 enum %d
 무치형

 void

   

 합성형





 array

    

 function

    

 pointer

    
 struct    
 union    


변수

상수값을 기억시키기 위한 기억장소를 말하여 메모리상의 임의의 위치로부터 일정 byte수 만큼의 공간을 확보해 놓은 후 해당 공간을 칭하는 이름이다.


[변수 선언 형식]
자료형 이름 변수이름;


자료 형변환(Data type Coversion)

(1)typedef
기존에 사용하고 있는 자료형 이름 대신에 다른 이름을 부여하여 사용하도록 하는 것
[ 형식]
typedef 기존형 이름 새로운 이름1, 새로운 이름2, ...;


(2)auto data type conversion

연산이나 대입시에 자료형이 자동적으로 바뀌어서 처리되는 것을 말하며 묵시적 형변환(Implicit Data Type Conversion) 이라고 한다.

자료형은 연산시 자료형의 크기가 큰 쪽으로 바뀌어서 연산 된다.

자료형의 크기 순서는 아래와 같다.

char →unsigned char → short → unsigned short → int → unsinged int → long → unsinged long → float → double


(3)User data type conversion

특정 자료의 형을 사용자가 강제적으로 바꾸어 주는 것으로 명시적 형변환(Explicit Data Type Conversion)이라고 한다.

Cast 연산자라고 주로 사용한다.

[ 형식]
(자료형 이름) 변환 대상체

4. operator

연산처리를 하기 위한 문자를 말하며 C언어의 연산자는 기계 코드연산 명령과 1:1 대응되도록 설계되어 있기 때문에 연산 처리속도가 상당히 빠르다.


연산자

 연산자 종류

 동등우선

 

 

 최우선 연산자

 [ ], ( ), ->, .

 →






 

 단항 연산자

 !, ~, +, -, ++, --, *, &, sizeof(),(자료형)

 ←

 



 산술연산자

 *, /, %

 →

 

 +, -

  →

 

 시프트 연산자

 <<, >>

  →

 

 관계 연산자

 >, <, >=, <=

  →

 
 !=, ==
  → 
 논리 연산자
 이진 논리 연산자 : & > ^ > |
  → 
 일반 논리 연산자 : && > ||
  → 
 삼항 연산자

 ?:

 ← 
 대입연산자 =, +=, -=, *=, /=, %/, &=, ^=, |=, <<=, >>=
 ← 
 컴머 연산자
 , → 


5. input/ouput function

입/출력 처리란 어떤 데이터를 외부 장치(키보드, 마우스, 디스크 등)로 부터 program 내부(memory)로 읽어 들이거나 memory에 있는 data를 외부 장치로 내보내 주는 작업을 말한다.

[ 입/출력 처리]
입력장치((keyboard, mouse, disk etc) →  기억장소(Memory) →  출력장치(Monitor, Disk, printer)


출력함수

name

 usage

 output

 putchar()

 putchar('charatr'); 화면에 한 글자 출력, putchar('A');

 monitor

 puts()

 puts("strings"); 화면에 문자열 출력, puts("Korea");

 printf

 printf("메시지");printf("출력서식 및 메시지", 대상체1,대상체2,...);

화면에 한 글자나 문자열 출력, printf("Korea"); printf("%s", "Korea");

 fputc()

 화일에 한 글자 출력, fputc('charter',화일변수 포인터);

 file

 fputs

 화일에 문자열을 출력, fputs("strings",화일변수 포인터);

 fprintf()

 화일에 문자나 문자열 그리고 숫자등을 출력,

fprintf(화일변수 포인터, "출력서식 및 메시지", 대상체1,대상체2,...);



입력함수

name

 usage

 output

 getchar()

 getchar('charatr'); 화면에 한 글자 출력, putchar('A');

 from keyboard

 gets()

 gets("strings"); 화면에 문자열 출력, puts("Korea");

 scanf

 scanf("메시지");scanf("출력서식 및 메시지", 대상체1,대상체2,...);

화면에 한 글자나 문자열 출력, scanf("Korea"); printf("%s", "Korea");

 fgetc()

 화일에 한 글자 출력, fgetc('charter',화일변수 포인터);

 from file

 fputs

 화일에 문자열을 출력, fgets("strings",화일변수 포인터);

 fscanf()

 화일에 문자나 문자열 그리고 숫자등을 출력,

fscanf(화일변수 포인터, "출력서식 및 메시지", 대상체1,대상체2,...);



6. 제어문

프로그램의 실행 순서를 바꾸어 주는 문을 말한다.


 

 

 

 goto

 무조건 분기문

 goto label;

 if ... else

 조건문

 if(조건식) 명령1

 switch ... case

 조건문

 switch(수식){

           case value 1: command1;command2;...commandn;break;

           case value 2: command1;command2;...commandn;break;

            :

            case value n: command1;command2;...commandn;break;

            default: command1;command2;...commandn;break;

            }

*break가 있으면 switch문 끝으로 이동하고, 없으면 다음 case를 지속 수행한다.

 for

 조건, 반복문

 for(초기식; 조건식; 증감식)

           명령1;

 while

 조건,반복문

 while(조건식)

      명령1;

*while문의 조건식이 거짓이 될때까지 loop내의 명령을 반복 수행한다. 거짓이 되면 빠져나옴.

 do ... while

 반복, 조건문

 do{

      command 1;

     }while(조건식)

 

*do...while문의 조건식이 거짓이 될때까지 loop내의 명령을 반복 수행한다. 거짓이 되면 빠져나옴.

 break

 탈출문

 *while문의 조건식이 거짓이 될때까지 loop내의 명령을 반복 수행한다. 거짓이 되면 빠져나옴.

 continue 게속문

 *for, while, do..while에서 사용되며, block의 끝 부분을 만난 것으로 인식한다. 그러므로 continue를 만나면 조건식으로 이동하여 다음 조건을 수행한다.


 while(조건식){

      1;

      continue;

      command 2;

     }

 return 제어 반환문
 



7. function


8. 기억류(Storage class)


9.선처리부(Preprocessor part)

10. Array

11. Structured type

반응형

+ Recent posts