programming language 103

std::vector, std::deque

std::vector std::array는 크기가 고정되어 있는 반면(항상 stack 사용), vector는 가변 크기 배열이다. std::vector vec; // 크기가 0인 벡터 선언 std::vector 함수 push_back(val) 맨 마지막에 원소 추가 insert(val) 삽입할 위치를 나타내는 반복자를 첫번째 인자로 받음으로써 원하는 위치에 원소 추가 pop_back(val) 맨 마지막 원소 제거 erase() 두가지 형태 vec.erase(vec.begin) //= vec.erase(vec.begin() + 1, vec.begin() + 4) : 두번째, 세번째만 삭제하는 것 clear() 벡터 초기화 sort(a.begin(), a.end(), 임의함수 bool형태) std::dequ..

std::array

std::array 원소의 타입과 배열 크기를 매개변수로 사용하는 클래스 템플릿 메모리를 자동으로 할당하고 해제한다. (클래스 템플릿 : 클래스의 일반화 선언, 배열출력하는 함수 만들때 다양한 배열을 출력하기위해 사용) std::array arr1; template class 클래스명{ 클래스 멤버; }; template void print(const std::array& arr>; auto a; //auto 는 타입추론형식. //처음 선언된 자료형을 추론한다. for (auto elements : arr) //배열 arr 원소들을 auto로 함 std::array.size() 배열의 크기 std::array.at(index) 원하는 배열 index 값 반환 std::array.begin() 첫번째 원소..

연속된 자료구조 vs 연결된 자료구조

연속된 자료구조 연결된 자료구조 모든 데이터가 메모리에 연속적으로 저장된다. 데이터는 노드에 저장되고, 노드는 메모리 곳곳에 흩어져 있다. 임의 원소에 즉각적으로 접근할 수 있다. (시작주소 + 2 * sizeof(type) 식으로 수식을 통해 접근한다) 임의 원소에 접근하는 것은 산형 시간 복잡도를 가지며 느린 편입니다. 데이터가 연속적으로 저장되어 있고, 캐시 지역성 효과로 인해 모든 데이터를 순회하는 것이 매우 빠릅니다. 캐시 지역성 효과가 없으므로 모든 데이터를 순회하는 것이 느린 편입니다. 데이터 저장을 위해 정확하게 데이터 크기만큼의 메모리를 사용합니다. 각 노드에서 포인터 저장을 위해 여분의 메모리를 사용한다. 배열의 유형 1. 정적 배열 (stack) : 선언된 블록이 끝나면 소멸 int ..

[프로그래머스 Level1] 신규 아이디 추천

문제 입출력 문제풀이 1. 7단계를 순차적으로 맞춰야 하므로 단계별 코드를 짰다. -1단계 : 대문자->소문자로 변경, tolower() 함수를 이용했다. -2단계 : 조건에 맞지 않는 문자 삭제하기. if조건문에 문제조건에 맞지 않는다면 으로 썼는데 시간초과가 났다. if조건문에 문제조건문을 쓰고 continue와 else문으로 제거를 했다. 제거시, erase()함수를 이용한다. : new_id.erase(new_id.begin() + i); -3단계 : 문자 '.' 가 2개 이상이면 1개만 존재하도록 하기. 나는 i-1와 i+1가 '.'일때 모두 따져야 한다고 생각했는데( 시간초과 남) , i 검사시 i-1 만 따지면 되었다. 그래서 for문도 i=1부터 시작! i-1있으니까. -4단계 ~ 7단계 ..

[프로그래머스 Level1] 실패율

문제 입출력 문제 풀이 1. 실패율 구하기 = 해당 스테이지 통과하지 못한 사람 / 해당스테이지도전자 (해당 스테이지까지 온 사람) - 주어진 배열 : 스테이지 통과하지 못한 사람들의 스테이지 번호들 (총 배열의 원소개수 = 총 인원) - 배열을 정렬하기 : 해당 스테이지까지 온 사람과 아닌 사람을 구분할 수 있을 것 같아서. - stages[index] 가 1~5 (스테이지들)이라면 index++해주면서 index값이 실패율의 분자니까 이용한다. - usernum은 해당 스테이지도전자인데, 다음 for문 전에 스테이지를 통과못한 인원(index == failcnt)를 빼준다. - 결과값에 필요한 스테이지 번호와 함께 fail 벡터에 실패율과 스테이지번호 저장한다. while(stages[index] =..

[프로그래머스 Level1] 다트게임

문제 입출력 문제 풀이 1. string dartResult 를 쪼개서 조건문으로 숫자/알파벳/옵션을 비교한다 - #include string STL 이용한다 : dartResult[i] , dartResult.size() 2. 숫자 비교하기 - dartResult[i]가 0~9사이일 때의 조건문 설정 - 숫자가 0-9일때 값 저장 - 숫자가 10일때 : [i+1]가 0이면 10을 저장한다. i++을 통해 10 다음의 문자열을 비교하기 3. 알파벳 비교하기 - dartResult[i]가 S D T 일 때의 조건문 설정 - D, T일 때 pow(score, 2)를 이용해 제곱수를 저장한다 - pow()는 #include 4. 옵션 비교하기 - 알파벳 다음의 [i+1]을 비교하기 - *일때 : 전의 값 또한..

[카카오 신입 공채 1차 코딩 테스트 문제] 비밀지도

문제 입출력 문제풀이 (1) 하나의 배열 값을 만들기 - 입력받은 정수배열 순서대로 OR 연산 하기 - arr1에 arr1과 arr2의 OR연산값을 넣었다. (2) OR연산값 십진수를 이진수로 변환하여 출력하기 - arr1 % 2 를 통해 이진수로 변환하기 - string tmp에 stl push_back을 이용해서 값 넣기 - 한번의 계산 뒤, arr1 = arr1/2으로 계산반복 - 입출력 조건에서 이진수 자리가 n이므로 while( tmp.size() != n)까지 반복하기 - 이진수 값은 계산 순서의 반대이므로 reverse함수 이용해 순서 바꾸기 #include #include #include #include //reverse함수 이용 using namespace std; //(1) 각 원소들을..

[프로그래머스 Level2] 프렌즈4블록

문제 입출력형식 문제풀이 (1) 4개의 알파벳이 같은 지 확인하기 vector board 에서, board[i][j]으로 하나의 문자를 나타낼 수 있다. i+1, j+1으로 네 개의 알파벳을 나타내고, if문으로 비교한다. if문에 들어간 경우 새로만든 vector visit(m, vector(n)) 에다 네 개의 알파벳을 표시한다. 이때 삭제를 바로 하면 안된다. 겹치는 경우, 바로 지워버리면 잘못 지워지는 경우가 발생하므로 먼저 visit 값을 이용해 삭제 전에 저장해둔다. if문에 들어간 경우 새로만든 vector visit(m, vector(n)) 에다 네 개의 알파벳을 표시한다. (참조 https://yabmoons.tistory.com/567) (2) 같은 알파벳 4개를 삭제하고, 위의 알파벳..

[C] 메모리 동적 할당 함수

1. malloc 함수 : 동적으로 메모리 할당하는 함수. 힙 영역에 메모리 할당하는 함수. 2. 특징 할당하고자 하는 메모리의 크기를 함수 호출 시 바이트 단위로 전달하면, 그 크기만큼 메모리를 힙에 할당하게 된다. 그리고 할당한 메모리의 주소(첫번째 바이트의 주소)를 리턴한다. 따라서 힙에 할당한 배열이나, 변수에 접근하려면 포인터를 사용해야 한다. malloc은 단순히 메모리에만 할당하는 함수이다. 인자 정보만을 가지고 포인터 타입, 즉 자료형을 결정짓지 못한다. 즉 리턴해야 할 주소값의 포인터 타입. 따라서 void*타입으로 주소값을 리턴한다. int형 데이터를 저장하기 위해서 메모리를 할당했다면, 리턴되는 void*를 int*로 변환해야 한다. int * i = (int*) malloc(size..