연속하는 날들에 대하여 각 날의 주식 가격이 주어져 있다. 이때 어떤 날에 주식을 산 후, 최대 이익을 남기며 이후의 날에 팔고자 한다. 어떤 날에 사서 어떤 날에 팔면 되는가?

두 가지 방법으로 해결하라.

방법 1: O(n2) 시간의 알고리즘

방법 2: 분할과 정복을 이용한 O(n log n) 알고리즘


입력 예

3 // 날 수
9 1 5 // 첫째 날 주식 가격: 9, 둘째 날 주식가격: 1, 셋째 날 주시가격: 5

출력 예

사는 날: 2일째
파는 날: 3일째





test 화일을 올려놉니다.







저는 O(n)의 속도로 탐색하는 알고리즘을 생각했습니다.
매우 빠른 속도로 동작하며, min , max 값의 원리를 이용하였습니다.

data : int 배열
len : 배열의 길이
buy : 주식을 사야하는 날 저장 공간
sell : 주식을 팔아야하는 날 저장 공간

중요 함수 부분입니다.


'도서관 I > Algorithm' 카테고리의 다른 글

[바람이] Bubble Sort  (0) 2006.05.25






[MySQL] MySQL 기본 명령어 정리



MySQL의 기본 명령어와 SQL문 정리. 내가 RDBMS에 완전 문외한이기 때문에 기본 SQL쿼리까지...

Redhat Linux 7.3, MySQL 3.23.58 에서 테스트함.

설치는 Redhat 기본 제공 RPM으로 했다.



데이터베이스 접속

$ mysql -u 사용자명 -p dbname



설치 직후에는 root 사용자에 비밀번호가 없으므로 다음과 같이 접속하여 MySQL을 관리할 수 있다.



$ mysql -u root mysql





비밀번호 변경

MySQL을 설치한 직후에는 root 계정에 암호가 지정되어 있지 않다.

다음 세가지 방법으로 비밀번호를 변경 할 수 있다.



  • mysqladmin이용

    $ mysqladmin -u root password 새비밀번호



  • update문 이용

    $ mysql -u root mysql



    mysql> UPDATE user SET password=password('새비밀번호') WHERE user='root';

    mysql> FLUSH PRIVILEGES;





  • Set Password 이용

    SET PASSWORD FOR root=password('새비밀번호');





일단 root 비밀번호가 설정된 상태에서는 mysql이나 mysqladmin 명령을 실행할 때 -p 옵션을 붙여주고 기존 비밀번호를 입력해야만 한다.



사용자 추가/삭제

mysql> GRANT ALL PRIVILEGES ON dbname.* TO username@localhost IDENTIFIED BY 'password';



username 이라는 사용자를 password라는 비밀번호를 갖도록 하여 추가한다. username은 dbname이라는

데이타베이스에 대해 모든 권한을 가지고 있다.

username 사용자는 로칼 호스트에서만 접속할 수 있다. 다른 호스트에서 접속하려면

GRANT ALL PRIVILEGES ON dbname.* TO username@'%' IDENTIFIED BY 'password';



위를 또한 번 실행한다. '%'에서 홑따옴표를 주의한다.

추가 : '%'를 호스트네임으로 지정해도 모든 호스트에서 접속할 수 없었다. 각 호스트별로 다 지정해야 했다.



불필요한 사용자 삭제는

mysql> DLETE FROM user WHERE user='username';

mysql> FLUSH PRIVILEGES;





데이터베이스 생성/보기



  • 데이터베이스를 생성하고,

    mysql> CREATE DATABASE dbname;



  • 현재 존재하는 데이터베이스 목록을 보여준다.

    mysql> SHOW DATABASES;



  • 특정 데이타베이스를 사용하겠다고 선언한다.

    mysql> USE dbname;



  • 쓸모 없으면 과감히 삭제한다.

    mysql> DROP DATABASE [IF EXISTS] dbname;



    IF EXISTS 옵션은 비록 데이타베이스가 없더라도 오류를 발생시키지 말라는 의미이다.





테이블 생성/보기



  • 테이블을 생성하고,

    mysql> CREATE TABLE tablename (

    column_name1 INT,

    column_name2 VARCHAR(15),

    column_name3 INT );



  • 현재 데이타베이스의 테이블 목록을 보고

    mysql> SHOW TABLES;



  • 테이블 구조를 살펴본다.

    mysql> EXPLAIN tablesname;

    혹은

    mysql> DESCRIBE tablename;



  • 이름을 잘못 지정했으면 이름을 변경할 수도 있다.

    mysql> RENAME TABLE tablename1 TO tablename2[, tablename3 TO tablename4];



  • 필요 없으면 삭제한다.

    mysql> DROP TABLE [IF EXISTS] tablename;







현재 상태 보기



mysql> status



--------------

mysql Ver 11.18 Distrib 3.23.58, for pc-linux (i686)



Connection id: 26

Current database: study

Current user: study@localhost

Current pager: stdout

Using outfile: ''

Server version: 3.23.58

Protocol version: 10

Connection: Localhost via UNIX socket

Client characterset: latin1

Server characterset: euc_kr

UNIX socket: /var/lib/mysql/mysql.sock

Uptime: 2 hours 9 min 59 sec



Threads: 1 Questions: 160 Slow queries: 0 Opens: 28 Flush tables: 1

Open tables: 1 Queries per second avg: 0.021

--------------







INSERT

mysql> INSERT INTO tablename VALUES(값1, 값2, ...);



혹은



mysql> INSERT INTO tablename (col1, col2, ...) VALUES(값1, 값2, ...);





SELECT

mysql> SELECT col1, col2, ... FROM tablename;



컬럼명을 *로 하면 모든 컬럼 의미.



mysql> SELECT col1 AS '성명', col2 AS '국어점수' FROM grade;



컬럼의 이름을 바꿔서 출력.



mysql> SELECT * FROM tablename ORDER BY col1 DESC;

mysql> SELECT col1, korean + math english AS '총점' FROM tablename ORDER BY '총점' ASC;



DESC는 내림차순 ASC는 오름차순.



mysql> SELECT * FROM grade WHERE korean < 90;



조건줘서 SELECT.



mysql> SELECT * FROM grade LIMIT 10;



결과중 처음부터 10개만 가져오기



mysql> SELECT * FROM grade LIMIT 100, 10;



결과중 100번째부터 10개만 가져오기. 첫번째 레코드는 0번 부터 시작한다.



UPDATE

mysql> UPDATE tablename SET col1=새값 WEHER 조건





DELETE

mysql> DELETE FROM tablename WEHRE 조건





mysql에서 쿼리 결과 세로로 보기

-E 옵션을 줘서 실행한다.

$ mysql -E -u root -p mysql




■ Requirements






■ Functions



▶ size_t strlen (const char *string)

Parameters

string

Null이 아닌 문자열.

Return Value

string문자열 중에 Null 문자를 제외한 문자의 개수를 반환한다.

Error에 대한 반환값은 정의 되어 있지 않다.

Remarks

이 함수는 string문자열 중에 Null 값을 제외한 문자의 개수를 반환한다.

Security Note

이 함수는 잠재적으로 buffer overrun 문제가 발생할 수 있다.

Buffer overrun은 적절하지 않은 수준의 권한이 되는, System 공격 방법중 하나이다.

더 자세한 사항은 Avoiding Buffer Overruns 을 참조하라.

추가 참조

char string[32] = "hello, world";



int size1 = sizeof (string);

int size2 = strlen (string);



printf("sizeof(string) = %d ,strlen(string) = %d\n");

result:

sizeof(string) = 32,strlen(string) = 12





▶ char* strcpy (char *strDestination, const char *strSource)

Parameters

strDestination

문자열이 복사될 목적 문자열 포인터

strSource

Null로 끝나는 원본 문자열


이 함수는 복사된 문자열 포인터를 반환한다.

Error에 대한 반환값은 정의 되어 있지 않다.

Remarks

strcpy 함수는 Null 문자로 끝나는 strSource 문자열을 strDestination로 복사한다.

원본과 목적 문자열이 겹쳐진다면 strcpy는 오작동 할 수도 있다.

Security Note

strcpy함수는 strSource를 복사하기 전에 strDestination의 공간을 확인하지 않아

잠재적으로 Buffer overrun을 발생시킬 수 있다. 대신 strncpy을 사용하라.



▶ char* strncpy (char *strDest, const char *strSource, size_t count )

Parameters

strDest

문자열이 복사될 목적 문자열 포인터

strSource

원본 문자열

count

복사될 문자 개수

Return Value

strDest을 반환한다. Error를 위한 반환값은 정의 되지 않았다.



strncpy 함수는 strSource의 처음부터 count개의 문자를 strDest로 복사하고,

strDest를 반환한다.

만약 count가 strSource의 길이보다 작거나 같다면,

복사된 문자열에 자동으로 Null문자를 붙여주지 않는다.

만약 count가 strSource의 길이보다 크다면,

목적 문자열은 count길이 뒤에 null문자를 붙여준다.

원본과 목적 문자열이 겹쳐진다면 strncpy는 오작동 할 수도 있다.


Security Note

strncpy는 strDest에 충분한 공간이 남아있는지 검사하지 않는다.

그럼으로 buffer overrun 발생의 잠재적 가능성이 있다.

count가 복사될 문자의 개수를 제한한다는 것을 잊지 마라.

그것은 strDest의 크기를 제한하는 것이 아니다.



▶ char* strdup (const char *strSource)

Parameter

strSource

Null로 끝나는 원본 문자열

Libraries

C run-time libraries의 모든 버전.

Return Value

이 함수는 복사된 문자열의 저장공간을 리턴하거나,

새로 할당할 수 없을땐 Null을 반환한다.

Remarks

strdup함수는 strSource의 복사를 위해 저장공간을 할당하려고 malloc함수를

호출한다. 그리고 strSource를 할당한 저장공간에 복사한다.


▶ char* strcat (char *strDestination, const char *strSource)

Parameters

strDestination

Null로 끝나는 목적 문자열

strSource

Null로 끝나는 원본 문자열

Libraries

C run-time libraries의 모든 버전.

Return Value

이 함수는 strDestination 를 반환한다. Error에 대한 반환값은 정의 되어 있지 않다.

Remarks

strcat 함수는 strDestination 문자열에 strSource 문자열을 붙여주고,

Null 문자로 목적 문자열을 종료 시켜준다.

목적 문자열의 Null 종료문자는 원본 문자열의 첫 문자에 의해 덮어 써진다.

문자열을 복사하거나 붙일때에는 overflow를 검사하지 않는다.

원본 문자열과 목적 문자열이 겹칠때에는 strcat 함수는 오작동 할 수 있다.

Security Remarks

첫번째 인자인 strDestination 은 반드시 strDestination 와 strSource 문자열,

그리고 Null 문자인 '\0'를 합친 크기보다 충분히 커야만 한다.

그렇지 않다면, buffer overrun이 발생할 수 있다.

만약 접근영역을 침범하면 서비스거부공격이 일어날 수 있고,

최악의 상황에서는 공격자가 당신의 프로세스에 실행가능한 코드를 삽입할 수 있다.

만약 strDestination 이 stack-based buffer였다면 특히 그렇다.

strncat 나 wcsncat 함수를 사용하여라.



▶ char* strncat (char *strDest, const char *strSource, size_t count)

Parameters

strDest

Null로 끝나는 목적 문자열

strSource

Null로 끝나는 원본 문자열

count

붙여질 문자 개수

Libraries

C run-time libraries의 모든 버전.

Return Value

이 함수는 strDestination 를 반환한다. Error에 대한 반환값은 정의 되어 있지 않다.

Remarks

strncat 함수는 기껏해야 strSource 문자열의 처음부터 count 개수만큼의 문자를

strDest 문자열에 붙인다.

목적 문자열의 Null 종료문자는 원본 문자열의 첫 문자에 의해 덮어 써진다.

만약 count 개수만큼 붙이기 전에 strSource 안에 Null 문자가 있다면,

strncat 함수는 Null 문자를 포함해 strSource 의 모든 문자를 붙인다.

만약 count 가 strSource문자열의 길이보다 크다면, strSource 문자열의 길이가

count 대신 쓰여진다. 결과 문자열은 Null문자로 끝나게 된다.

원본 문자열과 목적 문자열이 겹칠때에는 strncat 함수는 오작동 할 수 있다.

Security Remarks

첫번째 인자인 strDest은 반드시 strDest와 strSource 문자열,

그리고 Null 문자인 '\0'를 합친 크기보다 충분히 커야만 한다.

그렇지 않다면, buffer overrun이 발생할 수 있다.

만약 접근영역을 침범하면 서비스거부공격이 일어날 수 있고,

최악의 상황에서는 공격자가 당신의 프로세스에 실행가능한 코드를 삽입할 수 있다.

만약 strDestination 이 stack-based buffer였다면 특히 그렇다.

마지막 인자인 count는 strDest의 크기가 이나라

strDest중에 복사될 문자 개수임을 명심해라.




특정 site들에서 참고하여 보기 좋게 정리하며 제 생각을 추가한 것입니다

오래전 자료라서 어느 site인지는 기억이 나질 않네요.
방법 1

# vi /etc/passwd

기술된 유저 목록에서 목표 유저를 찾은뒤 /bin/sh 를 /sbin/nologin 으로 바꿔줌.

방법 2

usermod 명령어 사용

usermod -s /sbin/nologin account


man 에 기술된 정보

-s shell
The name of the user's new login shell. Setting this field to blank causes the system to select the default login shell.

-L Lock a user's password.
This puts a '!' in front of the encrypted password, effectively disabling the password. You can't use this option with -p or -U.


-U Unlock a user's password. This removes the '!' in front of the encrypted password. You can't use this option with -p or -L.

-L 과 -U 옵션을 활용해 보는 방법도 있다.
# vi /etc/network/interface

** DHCP **
auto eth0
iface eth0 inet dhcp

** static ip **
auto eth0
iface eth0 inet static
address xxx.xxx.xxx.xxx
netmask xxx.xxx.xxx.xxx
network xxx.xxx.xxx.xxx
broadcast xxx.xxx.xxx.xxx
gateway xxx.xxx.xxx.xxx
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers xxx.xxx.xxx.xxx

+ Recent posts