본문 바로가기

2021/08

C++ 문제풀이 - 낚시왕 (백준 17143) 이번에 풀어본 문제는 낚사왕이라는 문제인데요. 직사각형 모양의 격자 공간에서 낚시꾼이 상어들을 잡아올리는 상황을 이산 시간 시뮬레이션을 통해 알아보는 내용입니다. 이산 시간이라 한 것은, 불연속적으로 떨어진 시각에서의 상태를 다룬다는 의미입니다. 17143번: 낚시왕 낚시왕이 상어 낚시를 하는 곳은 크기가 R×C인 격자판으로 나타낼 수 있다. 격자판의 각 칸은 (r, c)로 나타낼 수 있다. r은 행, c는 열이고, (R, C)는 아래 그림에서 가장 오른쪽 아래에 있는 칸이다. www.acmicpc.net 시뮬레이션은 초 단위로 진행되며, 1초당 3개의 이벤트들이 발생하고 이를 구현해야 합니다. 첫번째 단계는 낚시인데요. 격자 공간의 첫번째 행 위에 있는 낚시꾼이 맨 왼쪽에서부터 1초당 오른쪽으로 한칸씩.. 더보기
블로그 디펜스 : 스팸 백링크 거부하기 다른 웹사이트로부터 제 블로그로 향하는 하이퍼링크인 백링크 (backlink)는 블로그의 품질을 평가하는 데 있어서 중요한 요소 중 하나입니다. 구글에서도 이걸 대놓고 말하고 있죠. 하지만 백링크도 백링크 나름이라서, 모든 백링크가 블로그의 평판에 도움이 되지는 않습니다. 예컨대 불법 스트리밍이나 공유 사이트에서 제 블로그로 향하는 백링크가 있다면, 검색엔진이 제 블로그를 평가하는 데 있어서 부정적인 요소가 되겠죠. 이런게 바로 스팸성 혹은 나쁜 백링크가 되겠습니다. 구글 알고리즘이 업데이트 되면서 요즘에는 한물 간 전술이 되었습니다만, 한 때 경쟁상대의 웹사이트로 향하는 스팸성 백링크를 왕창 걸어서 평판을 떡락시키는 방식이 판을 친 적이 있습니다. 현재로서는 이러한 백링크 공격만으로 치명타를 입히기는 .. 더보기
인스턴트 국수 열전 두번째 지난번에 포스팅했던 인스턴트 국수 열전 첫번째 인스턴트 국수 열전 첫번째 집콕생활이 오랫동안 지속되다 보니까, 아마존이나 다른 온라인 한인마트 등지에서 여러가지 국수 종류들을 주문해서 먹어보는 것이 일상의 새로운 낙이 되었습니다. 예전 같았으면 눈길을 주 swstar.tistory.com 에 이어서, 제가 최근에 먹어본 인스턴트 국수와 밥 등을 포스팅해보려 합니다. 사천식 비빔 국수 아마존에서 주문한 사천식 비빔 쌀국수인데요. 면이 낣작하고 마라 향이 강하게 느껴집니다. 넓적한 인스턴트 쌀국수와 액상소스 및 분말스프로 이루어진 단촐한 구성이며, 4개 묶음으로 들어가 있습니다. 먼저 쌀국수를 적당한 크기의 용기에 담고 뜨거운 물을 부어서 익혀줍니다. 그 다음 물을 따라내고 동봉되어 있는 스프들을 비벼서 먹.. 더보기
환경변수의 개념과 C/C++ 에서의 응용 여기서는 환경변수 (environment variable)의 개념과, 이를 C언어 또는 C++ 프로그램에서 사용하는 방법을 알아봅시다. 프로그램 외부에서 환경변수와 그 값들을 정의하고, 이를 프로그램에서 사용할 수 있도록 코드를 구성하면 편리합니다. 환경변수의 개념과 예시 환경변수란, 간단히 말해서 프로그램을 구동하는 프로세스들이 사용할 수 있도록 운영체제 레벨에서 정의된 변수들을 말합니다. 우리가 프로그램을 실행하면, 필요에 따라 여러 환경변수들에 저장된 값들을 가져다가 사용합니다. 좀 더 구체적인 예시를 통해 이를 살펴봅시다. 리눅스나 유닉스에서 가장 친숙한 환경변수 중의 하나는 PATH가 있는데요. 이는 터미널 콘솔에서 프로그램을 실행할 때, 쉘 (shell)이 PATH의 값으로부터 실행파일이 있는.. 더보기
C언어 동적 메모리 할당 (malloc, free 함수) 일반적으로 C언어에서 변수나 배열을 선언하면, 해당 코드블록이 끝나서 범위를 벗어날때 까지 메모리를 차지하게 됩니다. 하지만 이렇게 되면 메모리 공간의 낭비가 발생할 수 있죠. 필요할 때만 메모리에 변수를 저장하기 위한 공간을 할당해서 사용하는 것이 해결책이 될 수 있고, 이를 동적 메모리 할당 (dynamic memory allocation)이라고도 부릅니다. 동적 메모리 할당을 위해서는 먼저 포인터라고 하는 변수가 필요한데요. 메모리 상에서의 주소를 저장하기 위한 변수인 포인터의 개념이 생소하게 느껴지는 분들에게는 다음 포스팅이 큰 도움이 되리라 생각합니다. C언어 프로그래밍 기초 : 포인터 여기서는 C언어와 C++가 다른 프로그래밍 언어와 차별화되는 요소 중 하나인 포인터 (pointer)에 대해서.. 더보기
C언어 문자와 문자열 사용하기 여기서는 C언어 프로그램에서 문자와 문자열을 다루는 방법에 대해 살펴보겠습니다. 컴퓨터는 이진수를 다루는 기계이지만, 인간에게 가장 친숙한 건 알파벳 같은 문자들이죠. 컴퓨터도 결국 사람이 쓰는 도구이기 때문에, 프로그래밍 언어를 막론하고 문자열을 처리하는 법을 알아두면 상당히 좋습니다. 개인적으로 컴퓨터 시뮬레이션을 통해서 자연현상을 이해하는 것을 본업으로 해 왔기에, 문자보다는 숫자에 더 친숙했습니다. 그래서 이번 기회에 제가 유용하다고 생각되는 기능들을 중심으로, C언어에서 문자와 문자열을 다루는 법을 한번 자세히 짚어볼까 합니다. C언어 표준 라이브러리에 있는 함수들 이외에도, 문장으로부터 단어를 추출하거나 텍스트 파일로부터 프로그램을 실행하기 위한 설정 등을 불러오는 함수도 한번 만들어봅시다. .. 더보기
수학 상식 : 지수함수와 로그함수 이번에는 자연과학 및 공학 분야에서 중요하게 다뤄지는 오일러 상수 (Euler number 혹은 자연 상수)와 지수함수 (exponential function)에 대해 알아봅시다. 크기나 숫자 등이 폭발적으로 증가하는 현상을 두고 지수함수적으로 증가한다는 말을 많이들 쓰십니다. 지수함수는 증가율이 함수 자체에 비례하는 상황에 가장 걸맞는 수학적 개념이라고 볼 수 있죠. 지수함수 뿐만 아니라 그 역함수인 로그함수 (logarithm)와, 지수함수와 삼각함수간의 관계에 대해서도 짚어보겠습니다. 지수함수의 미분이 가진 특별한 성질과 결부지어서 바라보게 될텐데요. 함수의 기울기라는 의미를 가진 미분이 낮설게 느껴지거나, 미분 및 미분방정식에 대해 더 자세한 내용을 알고 싶으신 분들은 시작하기에 앞서서 다음 포스.. 더보기
C/C++ 코드가 프로그램이 되는 과정 여기서는 C언어 또는 C++로 작성된 소스 파일, 헤더 파일의 개념과 이들을 빌드하여 하나의 프로그램을 만드는 과정에 대해 간략하게 짚어보겠습니다. 여러 개의 소스, 헤더 파일들로 이루어진 코드를 빌드하는 과정에서, 오브젝트 파일들과 외부 라이브러리가 어떻게 개입하는지도 알아봅시다. C언어나 C++ 소스 코드를 작성하기 위한 기본적인 문법에 대해 다룬 글들이 하단에 링크되어 있습니다. 맨 처음 입문하시는 분들에게 큰 도움이 되리라 생각합니다. 소스 파일과 헤더 파일 먼저 C/C++ 소스 파일 (source file)과 헤더 파일 (header file)의 개념과 역할에 대해 짚어볼텐데요. 이들은 C언어나 C++ 문법에 따라 명령어들을 나열한 텍스트 파일입니다. 이 명령어들을 순차적으로 실행하라고 컴퓨터에.. 더보기
C/C++ 원주율 계산 프로그램 여기서는 수학 상수 중 하나인 원주율을 계산하는 간단한 프로그램을 소개해볼까 하는데요. 물론 원주율의 값은 이미 잘 알려져 있고 C언어 수학 함수 라이브러리에도 있지만, 단순히 값만 외우는거랑 직접 계산해보는 것은 다르다고 생각했기 때문에 이 포스팅을 하게 되었습니다. 원주율을 계산하기 위한 방법으로는 무한 급수나 몬테-카를로 (Monte-Carlo) 방법등 여러가지가 있습니다만, 여기서는 정적분을 통해서 원주율을 구해 보겠습니다. 이는 역삼각함수 중 하나인 아크탄젠트 함수가 특정한 값을 인자로 받는 경우에, 원주율에 비례하는 값을 돌려준다는 사실을 이용한 방법인데요. 원주율과 삼각함수에 대한 자세한 내용이 궁금하시다면, 다음 포스팅을 참고하면 도움이 되리라 생각합니다. 수학 상식 : 원주율과 삼각함수 .. 더보기
수학 상식 : 원주율과 삼각함수 여기서는 기하학에 관련된 중요한 상수인 원주율과, 과학 및 공학 분야에서 가장 흔하게 접할 수 있는 주기함수인 삼각함수에 대해 얘기해볼까 합니다. 원주율과 호도법 먼저 유클리드 공간에서 원주율을 정의하는 방법과, 각도를 나타내는 방법인 호도법에 대해 알아봅시다. 유클리드 공간이란 간단히 말하자면 두 점 사이의 직선거리를 피타고라스 정리로 구할 수 있는 평탄한 공간을 이야기합니다. 피타고라스 정리가 통하지 않는 비유클리드 공간의 대표적인 예시로 구면이 있죠. 유클리드 공간에서 원을 그렸을 때, 원의 둘레와 지름 사이의 비율은 원의 크기와 무관하게 일정한 값을 가지는데요. 원의 둘레를 지름으로 나눈 일정한 비율의 값이 바로 원주율입니다. 보통 그리스 문자 파이 (pi)로 표시하며, 그 값을 소수점 10번째 .. 더보기