컴퓨터 시스템이라고 국내에 번역된 Computer System : A Programmer's Perspective의 3장 내용을 드디어 다 읽었다.

3장은 C언어와 x86-64 어셈블리간의 관계를 탐구하면서 주로 어셈블리어의 명령어와 이를 통한 약간의 최적화를 다룬다. 지금까지 C++이나 파이썬만 써왔기에 레지스터에 직접 값을 할당하고 연산하는 어셈블리에 익숙하는데 꽤 시간이 걸렸고 사실 아직도 연습문제를 풀려면 책을 앞 뒤로 왔다 갔다 해야 하지만(책이 2장에 비해 3장이 훨씬 너덜너덜하다..) 추상화된 언어로 쓰여진 코드를 실제로 컴파일러는 어떤 방식으로 기계어와 유사한 어셈블리어로 바꿔주는 지에 대해 알아 볼 수 있다. 또한 %rsp; 스택포인터를 소개하면서 프로그램의 절차에 대해서도 배울 수 있다. 비전공자인 나는 항상 컴퓨터의 동작에 대해서는 아무런 지식이 없었는데 CS:APP를 보면서 type과 메모리, 그리고 컴퓨터 시스템에 대해서 자세히 알 수 있는 기회가 됬다. 

구글에 CSAPP를 검색하면 인강도 찾아 볼 순있는데.. 어짜피 책을 읽어야 할 것 같아서 책만 읽으나, 강의도 보고 책도 읽으나 그게 그거 인 것 같다.. 책 설명이 워낙 친절해서 진도가 느릴 뿐이지 애매하진 않다. 3장을 다 읽었으니 이제 Bomb-lab을 해야지!

'공부 일지' 카테고리의 다른 글

CS:APP attack lab phase_3  (0) 2018.07.27
CS:APP Bomb lab Phase_5 풀이  (0) 2018.07.11
CS:APP Bomb lab Phase_4 풀이  (0) 2018.07.11

10799번 쇠막대 문제는 스택을 이용해서 풀면 쉽게 풀 수 있지만 레이저와 쇠막대의 관해서 조금 생각해 볼 필요가 있다.

비슷한 문제로는 9012번 괄호문제도 있다. 괄호문제는 뭔가 코드가 더럽게 나온거 같은데 쇠막대 문제는 논리구조가 깔끔해서 오히려 더 맘에 드는 문제이다. 쇠막대와 레이저간의 관계만 파악하면 쉽게 코드를 작성할 수 있는데 쉽게 말해 레이저가 쏘아질 때 지금까지 스택에 쌓여 있는 괄호가 쇠막대라고 생각하면 된다. 스택에 쌓여 있는 괄호만큼 레이저로 인해 쇠막대가 분리 되고 이 괄호들이 팝될 때 나머지 분리된 쇠막대가 추가 된다고 생각하면 쉽다. 



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <stack>
#include <string>
using namespace std;
char a = '(';
stack<char> vpn_chk;
string vpn;
long long iron = 0;
bool recent = 0;
int main()
{
    cin >> vpn;
    int len = vpn.length();
    for (int i = 0; i < len; ++i)
    {
        char chk = vpn[i];
        if (chk == a){
            vpn_chk.push(vpn[i]);
            recent = true;
        }
        //pop 될 경우 레이저인 경우와 아닌 경우로 나뉜다.
        else
        {
            vpn_chk.pop();
            if (recent == true)
            {
                iron += vpn_chk.size();
                recent = false;
            }
            else
            {
                ++iron;
            }
        }
    }
    cout << iron;
    return 0;
}
cs



'백준 온라인 저지' 카테고리의 다른 글

백준 11053: 가장 긴 증가하는 부분 순열  (0) 2018.07.09
백준 2156: 포도주 시식  (0) 2018.07.09
백준 9465: 스티커  (0) 2018.07.09
백준 2193: 이친수  (0) 2018.07.09
백준 11057: 오르막 수  (0) 2018.07.09

+ Recent posts