목록전체 글 (275)
컴굥일지
1. 컴파일러와 인터프리터 - High-level 프로그래밍 언어로 작성된 코드를 기계가 이해할 수 있게 기계어로 바꾸어주는 소프트웨어이다. - 프로그래밍 코드를 실제로 동작하는 프로그램, 즉 애플리케이션으로 바꿔준다. 1) 컴파일러 - 프로그램 전체를 한 번에 번역한 후, 완성된 머신 코드를 내놓는다. - 컴파일러가 변환한 머신코드를 사용자에게 보내주면, 사용자는 기계어를 실행해서 프로그램을 작동시킨다. => 머신코드가 고수준 언어보다 길이가 길기 때문에 파일의 크기가 커진다. - 기계어는 사람이 이해할 수 없기 때문에, 기계어 중에서 원하는 부분만 수정할 수 없다. => High-level로 작성된 코드에서 수정을 한 뒤에 다시 컴파일을 시켜야 하는 단점이 있다. 즉, 개발자 입장에서 빠르게 개발할 ..
1. 소프트웨어 공학 - 소프트웨어로 제품 또는 서비스를 만드는 방법에 대한 학문 - 어떤 제품/서비스를 기획, 개발, 테스트, 출시, 배포, 유지/보수하는 프로세스를 포함한다. - 제품/서비스를 개발하기 위해서는 다양한 분야의 사람들이 협업을 해야 하는데 이때 사용되는 협업 방식으로 폭포수 방식과 애자일 방식이 있다. 2. 폭포수 방식 VS 애자일 방식 1) 폭포수(Waterfall) 방식 - 각 단계를 완료하고 다음 단계로 넘어가는 방식으로, 예전부터 사용되는 고전적인 방식이다. - 단순하고 직관적이지만, 복잡한 프로젝트의 경우 각 단계를 한번에 완벽히 끝내기가 어렵다는 단점이 있다. - 수정 사항이 많이 생길 가능성이 높은데, 개발자들이 수정 사항을 반영하기 힘들 수도 있다. - 각 단계가 복잡하지..
1. 라이브러리 - 자주 쓰일법한 코드를 모아둔 것으로, 내가 필요한 코드를 가져와서 내 코드에 붙이는 방식이다. - 모든 언어에 동일한 기능을 하는 라이브러리가 있는 것이 아니다. 언어마다 맞는 라이브러리가 존재한다. => 언어를 선택하는 기준이 되기도 한다. 2. 프레임워크 - 프로그래밍의 뼈대가 이미 준비되어 있고, 일부 비어있는 곳만 내가 채우면 되는 방식이다. - 적은 양의 코드로 프로그램을 만들 수 있게 해 준다는 점에서 라이브러리와 유사하다. - 큰 틀이 정해져 있고, 세부 내용만 바뀌는 프로그램에 사용하기 좋다. - 내가 미처 생각하지 못한 부분(ex 보안, 암호화 등)에 대한 코드가 이미 포함되어 있다. - 이미 구조가 만들어져 있기 때문에, 큰 틀을 바꾸는 것은 어렵다.
자세한 언어 => 체계적인 언어 => 쉬운 언어 1. 자세한 언어 - 컴퓨터와 칩의 성능이 좋지 않던 시기에 발전한 언어로, Low-level에 가까운 어셈블리 언어와 C언어 등이 있다. - 아직 객체 지향의 개념이 나타나지 않았으며, 코드 작성 시 컴퓨터적 구조를 모두 고려해주어야 한다. - 컴퓨터가 이해하기 쉽게 작성해야 하기 때문에 사람이 작성하기는 어렵지만, 컴퓨터가 실행하기에 쉽다 - 프로그램의 실행 속도가 빠르고, 대체적으로 객체 지향 언어보다 저장 공간의 낭비가 적어 => 실시간이 보장되어야하는 서비스와 임베디드 시스템 등 처리 속도와 알고리즘이 중요한 분야에 주로 사용된다. 2. 체계적인 언어 - 협업과 생산성을 위해 객체 지향 개념을 도입한 언어로 JAVA, C++ 등이 있다. - 여러 ..
1. 프로그래밍 언어의 분류 기준 1) 객체 지향인가? 2) 코드에 자료형을 명시하는가? (Dynamic typing/Static typing) 3) 컴퓨터와 가까운가 인간과 가까운가? (Low-level/High-level) 2. Low-level VS High-level 1) Low-level - 컴퓨터와 가까운 언어, 추상화가 적게 되어있다. (추상화 : 몰라도 되는 내용은 숨기고, 꼭 알아야 할 내용만 드러내는 것) - 컴퓨터가 사용하는 언어는 Machine Language이다. - 자료형을 명시하는 C, JAVA 등은 Python, Ruby보다 컴퓨터와 가깝다. (컴퓨터가 이해하기 더 쉬우니까) - 기계어, 어셈블리 언어, C 등이 있다. 2) High-level - 인간과 가까운 언어, 추상화..
1. Dynamic typing - 변수의 자료형을 정해주지 않는 언어들을 Dynamic typing 언어라고 부른다. 변수의 자료형은 코드가 실행될 때 정해진다. - 간결하고 편리한 것이 특징이기 때문에, 컴퓨터적 구조가 생략되는 경우가 많다. => 코딩 속도가 빠르지만 실행 속도가 느리다. - 문법이 간결하고 코드에 어려운 표현이 적기 때문에 코드 내용과 로직을 파악하기가 쉬우며 배우기 쉽다. => 혼자서 빠르게 하는, 작고 단순한 프로젝트에 적합하다. (실행 속도가 민감하지 않은 프로젝트에 적합) -Python, Ruby, Javascript, PHP, Perl 등이 있다. 2. Static typing - 변수의 자료형을 정해주는 언어들을 Static typing 언어라고 부른다. 변수의 자료형을..
1. 객체 지향 프로그래밍 - JAVA, C++, C#, Python, Ruby 등의 언어가 있다. 1) 장점 -전체를 부분 부분으로 나누어 코딩하기 때문에, 수정 사항이 발생하더라도 관련된 객체만 고치면 된다. -전체를 완성할 필요 없이, 일부만으로도 기능을 테스트할 수 있다. -의미를 이해하기 쉬우며, 한 번 만들어둔 객체는 재사용하기가 쉽다. => 규모가 큰 프로젝트나 다량의 데이터를 다루는 프로그램에서 객체지향을 사용하면 좋다. 2) 단점 - 코드 작성 이전에 설계가 필요하며, 설계하는 것이 어렵다. - 사람이 이해하고 작성하기 편한 방식으로 코딩이 되어 있어, 컴퓨터의 처리 속도가 느려지거나 저장 공간 사용이 늘어나기도 한다. => 속도가 빨라야 하거나 저장 공간이 크지 않은 장치들(ex 냉장고..
백준 2346 풍선 터뜨리기 문제 링크 https://www.acmicpc.net/problem/2346 2346번: 풍선 터뜨리기 첫째 줄에 자연수 N(1≤N≤1,000)이 주어진다. 다음 줄에는 차례로 각 풍선 안의 종이에 적혀 있는 수가 주어진다. 편의상 0은 적혀있지 않다고 가정하자. www.acmicpc.net 문제 내용 N개의 풍선이 있고, 풍선 안의 수가 적혀있다. 풍선은 1번부터 터뜨리며, 터뜨린 풍선 안에 적혀있는 수만큼 이동하여 풍선을 또 터뜨린다. 단, 움직일 땐 터뜨린 풍선은 제외하고 생각한다. 문제 풀이 코드 #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(NULL); c..
백준 9093 단어 뒤집기 문제 링크 https://www.acmicpc.net/problem/9093 9093번: 단어 뒤집기 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문장이 하나 주어진다. 단어의 길이는 최대 20, 문장의 길이는 최대 1000이다. 단어와 단어 사이에는 www.acmicpc.net 문제 내용 문장을 입력받아, 각각의 단어를 뒤집어 출력하면 된다. 문제 풀이 getline()을 이용해서 '\n'이 나올 때까지 입력받고, 그 후에 처리를 한다. 공백이 나올 때까지 문자를 스택에 넣고, 공백이 들어오면 스택에 있는 것을 하나씩 꺼내서 출력하면 된다. 코드 #include #include #include using namespace st..
백준 2993 세부분 문제 링크 https://www.acmicpc.net/problem/2993 2993번: 세 부분 첫째 줄에 원섭이가 고른 단어가 주어진다. 고른 단어는 알파벳 소문자로 이루어져 있고, 길이는 3보다 크거나 같고, 50보다 작거나 같다. www.acmicpc.net 문제 내용 입력받은 문자열을 세 부분으로 나누어 뒤집고, 나누기 전과 같은 순서로 합친다. 이때 사전 순으로 가장 앞서는 단어를 출력한다. 문제 풀이 for문을 2번 돌려서 문자열을 3개의 토막으로 나눈다. 그리고 각각을 뒤집고, 이전과 비교하여 더 앞서는 단어를 ans에 저장한다. 코드 #include #include #include using namespace std; int main() { ios::sync_with..