스택

coding test/바킹독 2021. 10. 5. 18:07

이런 기본적인 것들부터 제대로 알아야

팍팍 성장할 수 있지.

 

먼저 들어온 것이 나중에 나가는 구조 FILO(First In Last Out)

이렇게 특정 위치에서만 원소를 넣거나 뺄 수 있는 제한이 걸려있다 함.

그래서 스택, 큐, 덱을 묶어서 Restricted Structure라고 부르기도 합니다.

 

스택의 성질

1. 원소의 추가가 O(1)

2. 원소의 제거가 O(1)

3. 제일 상단의 원소 확인이 O(1)

4. 제일 상단이 아닌 나머지 원소들의 확인/변경이 원칙적으로 불가능

 

s.empty() : 비어있는지 확인

s.size() : 원소 수를 반환

s.top() : 맨 위의 원소 리턴

s.push(n) : 맨 위에 원소 추가

s.pop() : 맨 위의 원소 삭제

'coding test > 바킹독' 카테고리의 다른 글

  (0) 2021.10.07
  (0) 2021.10.07
배열과 연결리스트  (0) 2021.09.27
코테공부 09.27  (0) 2021.09.27
전체를 특정값으로 초기화할 때 쓰는 방법  (0) 2021.09.17
블로그 이미지

Sunullo

겸손함이란, 숙이는게 아니라 확실하게 준비하는 것 분수를 아는 것

,

선형 자료구조

 

배열

- 임의의 위치에 추가하거나 삭제하는데 O(N)

- 특정 원소 접근 확인/변경 O(1)

 

연결리스트

- 임의의 위치 추가 삭제하는데 O(1).. 단, 주소를 알고있다는 가정하에..

- 특정 원소 접근 확인/변경 O(N)

'coding test > 바킹독' 카테고리의 다른 글

  (0) 2021.10.07
스택  (0) 2021.10.05
코테공부 09.27  (0) 2021.09.27
전체를 특정값으로 초기화할 때 쓰는 방법  (0) 2021.09.17
endl은 쓰지 안도록 한다.  (0) 2021.09.14
블로그 이미지

Sunullo

겸손함이란, 숙이는게 아니라 확실하게 준비하는 것 분수를 아는 것

,

- C++ 배열은 전역에 선언하면 원소들이 알아서 0으로 초기화됨

근데 그렇지 않으면 이상한 숫자들로 초기화 됨

 

- 배열에 특정 아스키 코드 순서가 개입되야하는데 0부터 시작하고 싶다면

첫번째 걸로 초기화 해 둘 수 있겠다.

예를 들어 알파벳 세기 문제에서

string s;

for(auto c : s)

   freq[c - 'a']++;

이런식으로 c는 결국 char나 string일텐데

a는 알파벳의 첫번째 순서니까

c를 a만큼 빼면 아스키 코드 상에서 a로 시작되는 알파벳 구간에서 시작되는것

'coding test > 바킹독' 카테고리의 다른 글

스택  (0) 2021.10.05
배열과 연결리스트  (0) 2021.09.27
전체를 특정값으로 초기화할 때 쓰는 방법  (0) 2021.09.17
endl은 쓰지 안도록 한다.  (0) 2021.09.14
ios::sync_with_stdio(0), cin.tie(0) 를 쓰는 이유  (0) 2021.09.12
블로그 이미지

Sunullo

겸손함이란, 숙이는게 아니라 확실하게 준비하는 것 분수를 아는 것

,

패스워드 대신에 토큰으로 인증하는 방식으로 바뀌었다는데,

 

토큰 기간이 끝났을 때 소스트리로 push하면

계정과 패스워드 다시 입력하는거 요구할때랑 비슷한 에러 문구가 뜸

 

remote:invalid username or password

Authentication failed for 'https://github.com~~~~.git

 

 

github 사이트에서 토큰의 기한을 확인하고 갱신해줄 필요가 있음

블로그 이미지

Sunullo

겸손함이란, 숙이는게 아니라 확실하게 준비하는 것 분수를 아는 것

,

1. 제일 짤막한건 cstring 헤더에 있는 memset 활용 (비추천)

 

2. for문 사용해서 값을 하나하나 다 바꾸는 것. 실수할 여지가 적음(추천)

 

3. fill 함수 활용. 실수할 여지가 적고, 코드도 짧음 (추천)

 

int a[21];
int b[21][21];

// 1.memset
memset(a, 0, sizeof a);
memset(b, 0, sizeof b);

// 2.for
for(int i = 0; i < 21; i++)
	a[i] = 0;
for(int i = 0; i < 21; i++)
	for(int j = 0; j < 21; j++)
    	b[i][j] = 0;
        
// 3.fill
fill(a, a+21, 0);
for(int i = 0; i < 21; i++)
	fill(b[i], b[i]+21, 0);
블로그 이미지

Sunullo

겸손함이란, 숙이는게 아니라 확실하게 준비하는 것 분수를 아는 것

,

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

scanf/printf랑 달리

cin/cout 은 ios::sync_with_stdio(0), cin.tie(0) 이라는 두 명령을 실행시켜야 함

 

이걸 안해두면 입출력의 양이 많을 때 시간초과가 발생할 수 있음

 

평소 Cstream과 C++stream이 동기화 되어 있기 때문에

cin/cout만 쓸거면 동기화를 끊는 ios::sync_with_stdio(0)로 명령을 내리는 것

 

but, visual studio2017/2019 등에서는 무조건 동기화를 유지하고 있어서

sync_with_stdio(0)를 무시함

하지만 보통의 채점 서버는 gcc를 사용하므로 분명히 차이가 있다함

 

해서 위의 명령어를 입력했다면

printf 와 cout등을 같이 쓰면 안된다 함

 

cin.tie(0)는 버퍼 관련 명령어이다

 

보통 우리가 입력을 하면 바로바로 화면에 출력되는거 같겠지만,

입력한 것의 일정량을 출력 버퍼 라는 곳에 일정량씩 담아뒀다가

콘솔화면에 옮겨주는 것

입력 버퍼 말고도, 출력 버퍼가 있는데

입력과 출력을 번갈아가면서 쓸 때

콘솔창 안에서 순서가 꼬이는 것을 방지하기 위해

cin 명령을 수행하기 전에 cout버퍼를 비워준다.

근데 온라인 저지 사이트에서는 출력 결과만 보므로 이 동작이 필요 없다.

cin.tie(0) 또는 cin.tie(nullptr) 를 사용해서 그 동작을 생략토록 한다.

블로그 이미지

Sunullo

겸손함이란, 숙이는게 아니라 확실하게 준비하는 것 분수를 아는 것

,

scanf/printf 에서는 C++ string을 사용할 수 없다 함

 

C에서는 char* 을 다루기 때문..

만약 scanf/printf 를 쓰면서도 string을 쓰고 싶다면

일단 char*로 입력을 받고

string으로 형변환해서 원하는 작업을 다 끝낸 후에

c_str() 메소드를 이용해 출력하면 된다 함

 

ex) 공백을 포함한 문자열을 받을 때는 밑에 3가지 예 중에서 getline이 가장 유리

char a1[10];
scanf("%[^\n]", a1);

char a2[10];
gets(a2); // gets 함수는 C++14 이상에서는 제거됨
puts(a2);

string s;
getline(cin, s);
cout << s;

 

블로그 이미지

Sunullo

겸손함이란, 숙이는게 아니라 확실하게 준비하는 것 분수를 아는 것

,