728x90

소스코드 243

C, C++] 헤더파일과, CPP파일로 소스 코드 분리

대학교 학부과정에서 C, C++을 배우는 상황에서는 소스코드를 헤더파일과 CPP(혹은 C, 여기서는 CPP파일로 통칭하겠다.)파일로 분할해서 활용하는 일이 거의 없다. 컴퓨터 사고를 키우는 것과 프로그래밍의 기초에 집중하는 부분도 고려하기 때문인 것도 있지만, 기본적으로 코드를 분할해서 관리할 정도로 코드가 길거나, 재사용할 일이 없기 때문인 것이 가장 크다고 생각한다. 이 글을 쓰면서 헤더파일과 CPP파일 분리를 논하고 있는 본인조차도 학부시절 자료구조 강의를 들을 때가 되어서(아마 연결리스트를 응용하는 함수였던 걸로 기억한다.) 자주 접한 편이었다. 그렇게 강제하거나 따로 배운 건 아니고, 손 하나 대지도 않을 코드를 복사 붙여넣기 해서 괜히 스크롤을 내려야 하는 번거로움에 대한 반항심과 다른 학생들..

C++] 일반화와 템플릿

template 키워드를 사용하면 중복함수들을 일반화시킨 특별한 함수 생성이 가능하다.이를 템플릿함수(template function) 혹은 제네릭함수(generic function)라고 한다.C++에서의 템플릿은 함수와 클래스 코드를 일반화시키는 도구 템플릿 함수나 클래스를 작성할 경우,template이란 키워드를 사용하여 로 제네릭 타입 T를 선언한다. 중복함수를 템플릿화하는 과정의 역과정을 구체화라 하며,컴파일러는 함수의 호출문을 컴파일하는 경우 구체화를 통해구체적인 함수의 소스코드를 생성해내며, 이를 구체화된 함수라 한다. #include using namespace std; class Circle { int radius; public: Circle(int radius = 1) { this->ra..

Web] 자바스크립트를 활용한 비밀번호 체크

커뮤니티, 쇼핑몰 같은 웹 사이트에서 회원가입을 하게 되면비밀번호를 확인하는 경우가 있다.자바스크립트를 활용하면 이를 간단하게 해결할 수 있다. 'password'와, 'pass1'을 입력한 상태. 두 칸 모두 'password'를 입력한 상태. 1234567891011121314151617181920function isSame() { var pw = document.twin.wUserPW.value; var confirmPW = document.twin.wUserPWConfirm.value; if (pw.length 16) { window.alert('비밀번호는 6글자 이상, 16글자 이하만 이용 가능합니다.'); document.getElementById('pw').value=document.getE..

백준 알고리즘] 7576 : 토마토(한국정보올림피아드)

https://www.acmicpc.net/problem/7576 철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자 모양 상자의 칸에 하나씩 넣어서 창고에 보관한다. 창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다. 하나의 토마토의 인접한 곳은 왼쪽, 오른쪽, 앞, 뒤 네 방향에 있는 토마토를 의미한다. 대각선 방향에 있는 토마토들에게는 영향을 주지 못하며, 토마토가 혼자 저절로 익는 경우는 없다고 가정한다. 철수는 창고에 보관된 토마토들이 며칠이 지나면 다 익게 되는지, 그 최소 일수를..

백준 알고리즘] 2193 : 이친수

https://www.acmicpc.net/problem/2193 알고리즘이 복잡한 건 없다.알고리즘에 대해서 지식이 전무한 사람은 모든 케이스를 테스트하려고 하지만,기본적으로 숫자길이를 확장해나가는 것에 있고,이전의 값을 바탕으로 답을 구해나갈 수 있다는 점을 감안하면 쉽게 풀어낼 수 있다. 숫자의 자릿수가 늘어날 때마다, 이전에 판단했던 이친수에서얼마나 많은 이친수를 만들어낼 수 있는지에 관한 점화식을 작성하기만 하면 된다.복잡한 2차원 테이블을 작성하는 것도 아니라서 비교적 쉬운 편이다. 유의해야 하는 점 하나는,n값이 커지면 int 범위를 넘어가기 때문에여기서 long long int를 사용했던 것처럼 이를 담아낼 수 있는 적합한 자료형을 사용해야 한다는 점이다. 123456789101112131..

Algorithm] 동적계획법 - 편집 거리(Edit Distance)

문서 편집 시 삽입, 삭제, 대체 연산이 사용되며이 때 어떤 특정 문자열 S를 다른 문자열 S`으로 변환시키 과정에서 필요한최소 편집 연산 횟수를 편집 거리(Edit Distance)라고 한다. stable이라는 문자열을 strike로 바꾼다고 할 때를 생각해보자.여러 가지 방법이 존재한다. 첫 번째 방법은 s, t, e는 그대로 두고 ‘abl’을 삭제하고 ‘rik’를 삽입하는 방식으로,3회의 삭제 연산과 3회의 삽입 연산으로 총 6회의 편집 연산이 실행되었다. 두 번째 방법은, s, t, e를 그대로 사용하고 ‘abl’을 ‘rik’로 바꾸기만 하면 stable을 strike로 바꿀 수 있고,3번의 대체가 발생했기 때문에 이 때 총 3회의 편집 연산 실행되었다. 두 문자열을 바꾸는 데 필요한 편집 거리를..

Algorithm] KOI(한국정보올림피아드) 지역본선 - 탑

KOI 통신연구소는 레이저를 이용한 새로운 비밀 통신 시스템 개발을 위한 실험을 하고 있다. 실험을 위하여 일직선 위에 N개의 높이가 서로 다른 탑을 수평 직선의 왼쪽부터 오른쪽 방향으로 차례로 세우고, 각 탑의 꼭대기에 레이저 송신기를 설치하였다. 모든 탑의 레이저 송신기는 레이저 신호를 지표면과 평행하게 수평 직선의 왼쪽 방향으로 발사하고, 탑의 기둥 모두에는 레이저 신호를 수신하는 장치가 설치되어 있다. 하나의 탑에서 발사된 레이저 신호는 가장 먼저 만나는 단 하나의 탑에서만 수신이 가능하다. 예를 들어 높이가 6, 9, 5, 7, 4인 다섯 개의 탑이 수평 직선에 일렬로 서 있고, 모든 탑에서는 주어진 탑 순서의 반대 방향(왼쪽 방향)으로 동시에 레이저 신호를 발사한다고 하자. 그러면, 높이가 4..

Algorithm] 동적계획법 - 연속 행렬 곱셈

연속된 행렬들의 곱셈에 필요한 원소 간 최소 곱셈 횟수를 찾는 문제로,일단 연속된 행렬 간의 곱셈이 모두 가능하다는 전제 조건 하에 이루어진다. A=10X20, B=20X5, C=5X15 다음 세 행렬에 대한 계산을 예로 들면, AxBxC는 두 가지 방법으로 계산할 수 있다. 1. (AxB)xC2. Ax(BxC) 두 가지 계산은 결과는 아무 차이가 없지만, 순서에 따라서 두 행렬 곱셈의 횟수가 차이가 나기 때문에이를 최소화하고자 하는 방법을 구성할 필요가 있다. 일단, 1번의 계산을 예로 들면, 1번의 계산에서는 AxB는 10x20x5로, 1000회의 원소 곱셈을 시행하고,AxB 행렬은 10x5로, (AxB)xC는 750회 곱셈을 진행해 전체적으로 1750회의 원소 곱셈을 시행해야 한다. 2번의 계산은 ..

DataStructure] C언어로 쉽게 풀어쓴 자료구조 9장 - 6

DataStructure] C언어로 쉽게 풀어쓴 자료구조 9장 - 6 C언어로 쉽게 풀어쓴 자료구조9장 Exercise 문제다.필자가 학교 다니면서 자료구조론 수업을 들었는데,과제로 제출했던 것들이고,난항을 겪고 있는 사람들에게 참고가 되었으면 하는 마음으로 올린다.자고로, 버그가 존재할 수 있으니 디버깅 작업은 필수다. 24. 퀵 정렬에서 함수가 수행되면서 정렬의 매 패스마다 다음과 같은 형식으로 화면에 출력하도록 함수를 수정하라. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081..

DataStructure] C언어로 쉽게 풀어쓴 자료구조 9장 - 5

DataStructure] C언어로 쉽게 풀어쓴 자료구조 9장 - 5 C언어로 쉽게 풀어쓴 자료구조9장 Exercise 문제다.필자가 학교 다니면서 자료구조론 수업을 들었는데,과제로 제출했던 것들이고,난항을 겪고 있는 사람들에게 참고가 되었으면 하는 마음으로 올린다.자고로, 버그가 존재할 수 있으니 디버깅 작업은 필수다. 23. 제일 작은 값을 선택하는 선택 정렬 알고리즘을 제일 큰 값을 선택하도록 변경하라. 정수 배열은 여전히 오름차순으로 정렬되어야 한다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748#include #include #define SWAP(a,b) {int t; t=a; a=b..

728x90