블로그를 너무 오래쉬어서 세미나 기록!
01 다중 반복문
구구단문제
02 소트인 사이드
1427번 : 방문배열 사용하기
- visited배열을 만들어준다.
- 해당하는 인덱스의 값을 추가해주면된다.
> 방문배열의 인덱스
방문을 체크할 대상
> 방문배열의 각 칸의 정보
해당 인덱스가 나타나는 대상이 방문된 횟수
03 알고리즘 헤더파일
크기 비교함수
최솟값 반환함수 : min(A,B)
최댓값 반환함수 : max(A,B)
- 전달 받은 두 수중 더 큰(작은)수를 반환한다
- 두 수의 자료형이 같아야한다.
두 수 교환함수
swap(A,B)
int tmp = A;
A= B;
B =tmp;
04 cmath 헤더파일
abs(숫자) : 절댓값
pow(A,B): 지수값을 더블형으로 반환
sqrt(숫자): 제곱근을 더블형으로 반환
문자열
c에서 문자열 생성방법
char배열이름[문자열길이 +1];
- 문자열 끝에 널문자'\0' 포함
- 실제 문자열 길이보다 하나 크게 선언(널을위해)
- 배열 요소 접근은 모든 배열이 동일
문자열 입력
scanf("%s",입력받을 배열의 이름)
- &없이 이름만(문자열일때는)
- 탭 문자 입력전까지 입력받은 문자를 모두 배열에 저장 > 엔터('\n') or 공백(' ')
공백 문자를 포함한 문자열 입력
scanf("%[^\n]s",입력받을 배열)
여러줄에 걸쳐 문자열입력시 getchar()함수 필수
ex)
scanf("%[^\n]s",입력받을 배열)
getchar()
scanf("%[^\n]s",입력받을 배열)
요런식으로
문자열출력
printf("%s:, 출력배열 이름);
strlen()함수
- int strlen(배열의 이름)
- 인수로 전달된 문자열의 길이를 반환하는 함수(널 제외)
- 인수로는 배열만
- cstring헤더 파일
string클래스를 이용한 문자열 방법
#include <string>
-문자열 끝에 널문자 포함 x
- 스트링 객체 선언하여 문자열 저장
string문자열 이름;
- 문자열 길이 명시 x
- 배열처럼 인덱스 이용해서 특정위치의 문자에 접근가능
string클래스를 사용한 문자열의 올바른 출력
char 배열이름[문자열길이+1];
scanf("%s",배열이름);
string 문자열 이름 = 배열이름;
printf("%s",문자열이름.c_str());
문자열길이
int 문자열이름. length()
int 문자열이름.size()
- string 헤더파일 인클루드
- 함수를 호출한 문자열 길이 반환함수.
- length가 대부분임.
문자열 연산
- string 클래스는 문자열 더하기 연산가능
- 더하기 연산자를 중심으로 순서가 바뀌지않고 연산
- 문자 + 문자열, 문자열 +문자, 문자열 +문자열
배열 초기화 함수
memset(배열이름, 초기화값,sizeof(배열이름));
- 배열전체 초기화함수
- cstring헤더파일
- 배열의 자료형에 따라 초기화값 다르게 입력
함수
int sum(x,y)
반환 자료형 ex) int
함수이름 ex) sum
매개변수 목록 ex) x,y
반환 타입
- 반환 값이 없는 타입 : void
함수에 인수 전달방법
01: 값에 의한 전달
02: 참조에 의한 전달
01) 값에 의한 전달
call by value
- 인수로 전달되는 변수가 가지고있는 값만 함수 내의 매개변수에 복사하는 방식
- 함수 내에서의 매개변수 조작은 인수로 전달되는 변수에 아무런 영향을 미치지 않음.
02) 참조에 의한 전달
call by reference
- 인수로 전달된 변수의 값을 복사 x
원본 데이터를 직접 전달하는 방식
- 동일한 작업 수행
c언어에서는 포인터로, c++ 에서는 참조자로
참조자?
타입 변수이름;
타입 & 참조자이름 = 변수이름;
- 대상 변수와 같은 메모리 위치 참조
- 참조자를 이용해 연산을 하게 되면 새로 선언된 참조 변수 뿐 아니라,
참조한 대상 변수도 같이 변경됨
- 주의! 변수타입 일치, 초기화 필수, 참조 대상 변경 불가능
재귀호출
- 함수 내부에서 함수가 자기 자신을 또 다시 호출하는것
- 호출 중단 명령문 필수!
시간 복잡도
- 문제를 해결하는데 걸리는 시간
- 알고리즘의 시간복잡도는 빅-오 표기법 사용
04 최대 공약수, 최소공배수
O(N)
1. 두개의 자연수를 입력받는다(더 큰수 a, 더 작은수 b)
2. 2부터b까지의 수로 a와 b를 모두 나누어보면 가장 큰 공약수를 구할 수 있다.
O(log N)
유클리드 호제법
1. 두개의 자연수 a,b에 대해 a를 b로 나눈 나머지를 r이라고한다(a>b)
2. a와b의 최대 공약수는 b와 r의 최대공약수와 같은것을 이용하면 최대공약수를 구할 수 있다.
GCD
1) 입력받은 두개의 자연수중 큰값을 a, 작은값을 b
2) a를 b로 나눈다 (나머지가 발생하지않는경우 4번으로 ,b가 a의 약수라는소리)
3) a를 b로 나누어서 발생한나머지를 r이라고 하고 a에 b값을 대입하고, b에 r값을 대입하여2번을 반복
4) 나머지가 발생하지 않을때 ,(r이 0일때) b의 값이 입력받은 두 수의 최대공약수
LCM
- 최소 공배수는 두 자연수의 공통된 배수중 가장 작은수
- 최소공배수는 최대공약수를 통해 구할 수 있음
'✍2021,2022 > 알고리즘' 카테고리의 다른 글
문제풀이(2) (0) | 2022.07.06 |
---|---|
C언어 세미나(4) (0) | 2022.07.06 |
백준 문제풀이 (0) | 2022.07.04 |
C언어 세미나 (3) (0) | 2022.07.04 |
알고리즘 공부 계획 (0) | 2022.01.20 |