728x90

프로그래밍 410

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] 비교 정렬의 하한

항상 고민하던 게 있다.비교 정렬의 하한이 nlogn이며 이보다 더 좋은 정렬 알고리즘은 없다는 이야기를 들었다.도대체 왜 그런 것인지, 어째서 그런 것인지에 대해서 잘 모르고 넘어갔다.주어진 문제에 대해서 시간 복잡도의 하한이라는 것은어떤 문제도 이 하한보다 빠르게 구할 수 없다는 것을 의미하는데,이 하한이 알고리즘에 대한 시간 복잡도가 아니라이 문제의 고유 특성으로 인해서 과거부터 지금까지, 혹은 미래에 만들어진어떤 효율적인 알고리즘이더라도 적어도 하한의 시간복잡도 만큼 걸린다는 것을 의미한다. n개의 숫자가 저장된 배열이 있다고 하자.여기서 최솟값을 찾는 문제의 하한은 최소한 n-1회의 비교가 필요하므로 n-1이다.이런 식으로 n개의 수를 비교 정렬할 때 필요한 최소 비교 횟수가 어떻게 되는지 생각..

Algorithm] 기수 정렬(Radix Sort)

기수 정렬은 흔히 알고 있는 비교 정렬들과는 조금 다른 정렬로 볼 수 있다.숫자를 부분적으로 비교하는 정렬이기 때문에,제한적인 범위 내(제한적인 크기 혹은 자릿수)에 있는 숫자들에 대해서 자릿수별 정렬을 시행하는 알고리즘으로,제한적인 상황 내에서는 어떤 비교 정렬 알고리즘에 비해서 속도가 월등하다는 장점을 가지고 있다.단점은 직전에 말했듯, 제한적인 상황에 유효하다는 것이다. 089, 035, 131, 907, 910이라는 숫자가 들어왔다고 하자.이들 입력에 대해서 각각의 자릿수(1의 자리, 10의 자리, 100의 자리)를 기준으로 정렬을 시행한다.이 때, 작은 단위의 자릿수부터 큰 단위의 자릿수로 정렬한다. 내림차순 정렬을 시행한다고 하자. input089070131907910 1의 자리 0899071..

Arduino] 3색 LED 사용하기

기본적으로 3색이라 하면 RED, GREEN, BLUE의 빛의 삼원색을 말한다.옆쪽에 FND와 연결된 기판은 이것저것 시도하고 있는 것이 있어 빵판에 그대로 둔 상태고,좌측에 물려 있는 LED가 바로 3색 LED다. 2초마다 각 LED를 작동시키는데빨강, 초록, 파랑, 노랑, 보라, 청록, 흰색, 꺼짐 순으로 작동한다. 빛의 3원색은 잘 조합하면, 노랑, 청록, 자홍색을 나타낼 수 있는데노랑의 경우 빨강과 초록,자홍은 빨강과 파랑,청록은 초록과 파랑이며흰색은 3색 모두 켜지면 나타난다. 반복문을 사용해 각 LED 값을 조정해주면 무드등을 만들 수도 있다. 12345678910111213141516171819202122232425262728293031323334353637383940int redPin = ..

Data Structure] 스택 클래스를 일반화한 제네릭 클래스

템플릿 이용해서 스택을 일반화해봤다. 클래스 활용도 연습을 해볼 겸, 템플릿 사용도 연습을 해볼 겸...다른 기능 없이 아주 일반적인 push, pop, 생성자만 구현했다.다음엔 리스트도 해볼 생각. #include using namespace std; template class Stack { int tos; T data[100]; public: Stack(); void push(T element); T pop(); }; template Stack::Stack() { tos = -1; } template void Stack::push(T element) { if (tos == 99) { cout

C] memset, memcmp

알고리즘 문제를 풀다보면, 새로운 값을 입력받을 때마다,임시적으로 사용했던 데이터들을 모두 갈아 엎고,메모리에 저장된 값을 특정한 값으로 일괄초기화를 해야 하는 경우가 생기는데,그럴 때마다 골치가 아팠는데 이럴 때 사용하기 좋은 메모리 조작 함수가 있다. memset, memcmp, memcpy, memmove는 string.h에 정의되어 있으며,memory.h에도 정의되어 있는데 이 때 memmove는 정의되어 있지 않으니,고민할 것 없이 string.h를 포함시키면 된다. 1. memset 함수 원형 1void * memset(void * ptr, int value, size_t num);cs 사용법memset(메모리 블럭 첫번째 주소, 문자(문자 하나), 메모리 블럭 크기(byte)) 활용자료형이 ..

C++] 다중상속(Multiple Inheritance)

Multiple Inheritance;다중상속 하나의 파생 클래스가 여러 클래스를 동시에 상속 받는 경우를 말하며,그 효용성에 비해 반대급부가 커서 사용하지 않는 편이며,C#, Java에서는 지원하지 않음. 여러 클래스를 상속받아 재사용과 효율을 높일 수 있겠지만,치명적인 문제를 가지고 있음 12345678910111213141516171819202122232425262728293031#include using namespace std;class BaseIO{public: int mode;};class In : public BaseIO{public: int readPos;};class Out : public BaseIO{public: int writePos;};class InOut : public In,..

728x90