Struct 배열
배열 내부의 struct 를 변경하고 싶으면 포인터로 접근해야한다.
문자열 \n 을 기준으로 나누고,
매번 접근하기 어려우니 Edit 에서 만 접근해놓는다.
문자열은 실제로 중요한가? 아니다. 변경되었는지만 중요하다.
for(auto it = arr.begin(); it!=arr.end(); it++);
[메모리풀]
메모리를 malloc 하지말고 풀을이용해라. 훨씬 편하다.
전역변수로 몇십만개 만들어두고, poolcnt =0 를 사용해라.
사용한 후에 재초기화도 필요없다. 단지 poolcnt =0 으로 두면 된다.
우리는 어차피 poolcnt++하기전에 해당 주소의 값을 변환하고 사용할 것이기 떄문이다.
- <stdio.h> <iostream> <malloc.h>만 사용가능
https://www.acmicpc.net/problem/2606 문제를
https://bloodstrawberry.tistory.com/29 로 풀어보자.
[IfElse / Switch Case]
switch 가 더빠르다.
[For문 밖에서 변수 선언]
- 안정적인 scanf, printf 권장
[비트]
-나눗셈은 느리다. 곱셈으로 대체 가능한지 봐라
-%연산보다 &1로 홀수인지 볼 수 있다.
-제곱수로 나누기 > 시프트로 가능
[register 변수 사용]
for 문 안에 있는 변수에 register를 사용해보자.
메모리 대신 CPU의 레지스터를 사용하기 때뭉네
for(register int i =0 ; i < 10000000; i++){
매우 빨라진다.
}
[입출력]
scanf prinf 써라.
[트리는 이차원배열로 만들기] > 포인터로도 만들지 마라 ! 그냥 이차원 배열 ㄱㄱ
케이스1 data를 인덱스로 사용가능한 경우 int일때:
[v] LR
케이스2 : data를 인덱스로 사용 불가능 한경우
VLR 연결리스트에서 했던것들을 그대로 이차원배열로 만든것이다. 데이터가 들어오는 대로 메모리에 차례대로 적재하면서 메모리 상에서 링크를 재조정하면서 트리를 완성
tip ) "root를 1 , 1부터 N까지 주어진다." > 1부터 누락없이
"V는 최대 N 까지" > 1부터 누락이 있을 수 있다. >> optional TF 를 만들어서 데이터가 들어온것만 처리한다. ( like visit배열이 두개의 표현은 다르다.
부모 정보를 구축하는것 추천!!!! root노드는부모가 0 즉 데이터 구조가 L eft Data PARENT Right
[완전이진트리면]
일차원 배열로 가능
자식은 2i 2i+1 이다. > 이걸로 자식이 있는지 확인 할 수 있다.
[전역변수]
레지서터 사용 필요까진 없다.
전역변수를 계속 접근해야한다면, 잠시 스택(로컬)에 넣어둔후에 사용끝난후 다시 갱신해준다.
0으로 초기화되서 bool 은 false
[함수 인수]
인수로 넘길때 인수가 많으면 struct로 넘기고,
수정되면 안된다면 const 를 붙여서 한다.
[포이넡]
포인터 체인*?은 피해야한다.
[스위치 대신 look up table 을 사용해라]
좌측의 것을 우측으로 치환해라.
[count down to zero 가 더빠르다 ( ==0 은 회로가 있기 떄문)
[함수호출 여러번]
호출을 여러번 하게 하지말고
함수안에 for 문을 넣어봐라.
[이진탐색트리 - 재귀]
작은값중에 가장 작은값 , 큰값중에 가장 작은값
int tree[MAX] = {0,} >> 일차원배열에 저장, 왼쪽오른쪽은 다로 저장하지 않는다.
>> 배열처음에 값 하나 넣어줘라. 뒤에서 따로 인덱스값 처리 안해줘도 될테니
[for문 변수는 밖에다 선언하고 안에서 쓰기]
[전역변수 접근은 성능저하]
전역변수는 data 영역에 생기기떄문에 접근할때 마다 비용이든다.
전역변수를 쓸떄마다
stack 영역에 할당하고 다쓴후 전역변수를 갱신해주는 것이 좋다.
[입력과 출력]
입력과 출력이 느리다.
개별글자 하나하나 보단 문자열 단위로 핸들링하는게 더빠르다. ( 따라서 문자 한개씩 다 출력하기보단
결합해서 한개의 출력에 빵 출력 떄려버리는게 낫다.)
- 구조체 및 포인터 이해 (ex. 포인터 배열로 대상 접근)
- 정적 배열 사용시 Runtime Error 방지를 위해서 여유롭게 크기 설정
- 배열 시작 Index는 상황에 따라 『 0 』 / 『 1 』 선택 //문제 보고 결정
- 매크로 함수보다는 inline 키워드 권장 ???????
ex) inline int max(int A, int B) { return A > B ? A : B; }
- 기출 유형 많이 풀어보기 (main.cpp + user.cpp 구조로 된 API형 문제)
: 문제 설명과 함께 main.cpp에서 함수 호출 횟수, 변수 조건 파악
- SWEA Reference Code 활용 (실제 시험에서도 주어짐)
ex) Heap, djb2, Quick Sort
- 첫번째 Test Case는 통과 후 2번째 Test Case부터 틀리는 경우는 초기화 init() 부분 의심
ex) 두번째 TC만 실행해보면서 확인
[구조체와 클래스의 차이점]
접근 범위가 다르다. (구조체는 public , 클래스는 기본적으로 private )
구조체는 동일 타입에 대해서 대입연산 가능
클래스는 생성자, 대입연산자 함수를 생성해서 써야한다.
[한글자 비교일떄는]
' ' 를 써라. " " 보다 더 빠르다.
공부해볼 만한 키워드
Array, Linked List, Bitwise 연산, Greedy, 완전탐색(Brute-Force), BFS, DFS, DP, 분할정복, Sort, Binary Search, Graph, Dijkstra, Tree, LCA, Heap, Trie, KMP, Hash
출처 : https://zoosso.tistory.com/335
https://blog.uniony.me/study/samsungb/
삼성전자 SW 역량테스트 B형 후기 1 (준비)
삼성전자 S/W 알고리즘 특강을 수강하여 운좋게 삼성전자 SW 알고리즘 역량테스트 B형(pro) 을 치를 기회를 얻었습니다. 2회의 기회가 주어졌고 저는 두번째 테스트에서 통과하여 B형을 취득하였습
blog.uniony.me
[큐 구현]
front , rear =0
rear 는 데이터가 곧 들어갈곳 ( 비어있음 )
front 는 첫 데이터 위치
rear == front면 데이터가 없다는 것이다.
'알고리즘' 카테고리의 다른 글
스택 구현 (0) | 2022.10.30 |
---|---|
14600. [Pro] 성적 데이터베이스 (0) | 2022.10.29 |
비트연산 / 비트마스킹 (0) | 2022.10.27 |
재귀함수에 대한 분석! (0) | 2022.05.09 |
순열과 조합 직접 개발하기 with yield 간단방법 (0) | 2022.04.30 |