본문 바로가기

프로그래밍

(131)
[백준1935번] (C) 후위표기식2 (1935)후위표기식 백준 1935번 https://www.acmicpc.net/problem/1935 착안점 double형 스택을 구조체로 선언 +, -, *, /인 경우를 제외하면 피연산자이므로 int형 배열에 있는 원소를 push 테크닉 push(ch-'A') 입력 예제를 보면, ABCDE와 같은 피연산자는 숫자로 변환한 뒤, push해줘야 한다. 피연산자는 항상 A, B, 부터 입력되므로 array 배열에 있는 원소들을 차곡차곡 push하기 위해서는 ch-'A'만큼 빼주어야 한다. 맨 처음에 입력하는 num이 곧 array 배열의 길이기 때문에 AA+A+ 입력된다 할지라도 상관이 없다. 실수했던 점 calculate 함수의 parameter를 double로 선언하지 않았던 점. 함수(pop, pe..
[백준1918번] (C) 후위표기식 백준 1918번 착안점 각 연산자(operator)의 우선순위값을 return해주는 isOperator 함수를 만들어줬다. (, ) : 우선순위 0 +, - : 우선순위 1 *, / : 우선순위 2 피연산자 : 우선순위 -1 (즉, A, B, C) postfix함수가 가장 중요한 함수라고 할 수 있다. for문을 이용해 글자 하나하나씩 읽어나간다. 우선순위 -1 : 피연산자는 그대로 출력 열린괄호 ( : 스택에 push 닫힌괄호 ) : 스택에 있는 (를 만날 때까지 pop 우선순위 1 이상 스택이 비어있지 않고 && 스택에 있는 연산자의 우선순위가 더 높다면 pop 그외의 경우라면 스택에 push 맨 마지막에서는 스택에 남아있는 것이 없도록 모두 pop #include #include #define MA..
[C언어] 삼항연산자 활용하기 삼항연산자 삼항연산자의 중첩 삼항연산자는 양날의 검이다. 라인수를 짧게 하고 싶다면 권장되지만, 이해하기 어려운 코드를 만들기도 한다. 삼항연산자는 if-else문을 한 번만 사용한 경우에는 간단하게 이해할 수 있다. a > b ? a : b a가 b보다 크면 a를 출력하고, b가 더 크다면 b를 출력하는 간단한 예제다. 이 삼항 연산자는 중첩을 할 수 있다는 것이 까다롭게 작용한다. 어떻게 쉽게 볼 수 있을까 if-else가 하나라면 이해하기 쉽지만, if문의 중첩이 일어나면 상당히 보기가 까다로워진다. 이럴 때는, 괄호를 쳐서 보자. if문의 중첩이 어디서 발생하느냐에 따라서 미묘한 차이가 있다. 간단한 예제 두 숫자를 입력받고(a, b) 하나의 문자(c)를 입력받는 코드다. +를 입력받으면 두 수의..
[C] 포인터(pointer) 간단하게 이해하기 포인터 나는 포인터가 죽어도 안 외워졌다. 나는 포인터가 죽어도 안 외워졌다. C언어의 꽃이라고 불리는 포인터를 이해하기에 조금 오랜 시간이 걸렸다. 간단하게 생각하자.일단 가볍게 짚고 넘어가자. 포인터(pointer)는 메모리 주소 '값'이다. *는 값이다. &는 주소값이다. * (asterisk) *는 별표다. 별이 붙으면 특별해진다. 군대에서도 별을 달면 대우가 달라진다. 별을 달면 값을 나타낸다. num이 가지고 있는 5를 출력하고 싶다면 ptr라는 변수에 *을 붙여서 *ptr로 나타내면 된다. 그런데, 계급장을 때면, 이 녀석(ptr)은 주소값이 된다. 정말 그런지 ptr만 출력해보자. 계급장을 떄면, ptr 변수는 주소값을 가리킨다. 정확하게 말하면, num 변수의 메모리 주소값을 가리킨다. ..
정보처리기사 기출문제 정리 2018년도 1분기 정보처리기사를 준비하면서 제가 풀어본 문제들을 오답노트 형식으로 정리했습니다. 행정병이었던 경험을 살려서 2012년 1분기부터 2017년 8월(가장 최근 시험)까지 '빠르게' 정리했습니다. 그렇기 때문에 오타가 있을 수도 있고, 뭘 이렇게 만들었어? 하시는 부분도 있을 수 있지만 저만의 외우기 TIP이나 문제 배치를 최대한 효율적이도록 신경을 썼습니다. 쉬운 문제들은 건너 뛴 것들이 많고, 제가 틀린 것 위주로 모아놨기 초심자분들께는 잘 맞지 않을 수도 있습니다.
그레이 코드(gray code)를 2진 코드로 변환하기 Gray code 1111을 2진 코드로 바꾸면? 1. 1010 2. 1011 3. 0111 4. 1001 정답 : ① ※ XOR 연산 (서로 다르면 1)ABXOR000011101110 1단계그레이코드11112진 코드1 ① 맨 왼쪽은 일단 그대로 내릴 것 ⇒ 1 2단계그레이코드11112진 코드1⇒ 0 ② 그레이 코드 오른쪽으로 한칸 옮겨서 이진코드랑 XOR 연산 3단계그레이코드11112진 코드10=> 1 ③ 또 한칸 옮겨서 XOR 연산 4단계그레이코드11112진 코드101⇒ 0④ 또 한칸 옮겨서 XOR 연산 정답 : 1010
[컴퓨터구조] 인터럽트(Interrupt)란? 인터럽트 개요 2017년 컴퓨터구조 과목을 수강하면서 가장 많이 나온 단어가 인터럽트가 아닐까 싶다. 외부 인터럽트, 내부 인터럽트 인터럽트 서비스, 인터럽트 서비스 루틴, 인터럽트 핸들러, 인터럽트 벡터 등등.. 인터럽트와 관련된 많은 용어들이 나를 괴롭혔다. 이번 포스팅에서는 나를 괴롭혔던 인터럽트에 대해 포스팅하고자 한다. 박찬호 선수를 CPU라고 생각해보자. CPU가 방송 프로그램에 나와 입담을 가동하고 계시다. 한 학생이 용기를 내어서 박찬호 선수의 말을 끊는다. "저 질문이 있습니다!" 바로 이 학생이 한 행동을 인터럽트(interrupt)라고 한다. 즉, CPU의 정상적인 프로그램 실행 을 방해했다는 의미다. 이때 박찬호 선수는 질문을 먼저 처리하고, 다시 원래 했던 얘기로 돌아가 입답을 펼..
단정도(single precision), 배정도(double precision)이란? 부동소수점 개요 처음 C언어를 공부할 때 가장 어리둥절했던 부분이 이 부분인 듯 하다. 처음에는 왜 이걸 배우지? 라는 생각을 했지만 컴퓨터구조론에서 컴퓨터가 실수를 다루는 방식에 대해서 학습하면서 흥미롭게 느꼈다. 다만, 지수와 가수라는 용어가 자꾸 헷갈리기 때문에 영어와 같이 외우는 편이 좋다고 느꼈다. C언어에서 변수의 자료형을 정해줄 때 다음과 같은 자료형을 사용한다. float fnum = 3.141593f; double dnum = 3.141592653589793; float : 단정밀도(single precision) 32비트 double : 배정밀도(double precision) 64비트 좀 더 확장된 long double도 있지만 이는 생략하도록 하겠다. 오늘은 이 배경이 되는 IEEE..