'프로그래밍 > 알고리즘' 카테고리의 다른 글
| 아스키 코드 (0) | 2023.02.07 |
|---|---|
| 10진수 -> 2진수/ 2진수 -> 10진수 변환하는 방법 (0) | 2023.02.07 |
| 아스키 코드 (0) | 2023.02.07 |
|---|---|
| 10진수 -> 2진수/ 2진수 -> 10진수 변환하는 방법 (0) | 2023.02.07 |
https://www.acmicpc.net/problem/5430
5430번: AC
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
www.acmicpc.net
이 문제에서 vector 의 erase와 string erase, find 함수를 사용했는데, 계속해서 시간초과가 났다.
vector erase함수를 O(1)로 생각해서 그렇게 썼는데, 실은 O(N)의 시간복잡도를 가지고 있었다..무지ㅋㅋ
그런 참에 시간복잡도를 정리해보려고 한다
Vector<T>
[],at를 통한 접근 - O(1)
find() - O(N)
insert(), erase() - O(N)
pop_back() - amortized O(1)
push_back() - amortized O(1)
Deque<T>
[],at를 통한 접근 - O(1)
find() - O(N)
insert(), erase() - O(N)
pop_front() - O(1)
push_front() - O(1)
pop_back() - O(1)
push_back() - O(1)
string
+= : O(N)
+ : O(N^2)
insert(),erase() - O(N)
find() - O(N)
*amortized O(1)
보통 O(1)인데 capacity가 꽉차면 기존 메모리를 해제하고 새로운 메모리를 할당하여 옮기게 된다.
이 때 O(N)의 복잡도를 갖게된다. 즉 드물게 O(N)이 될수도 있다는 것이다.
*참고한 사이트
https://80000coding.oopy.io/cf49e471-7acb-4130-8654-fcfeed13bda5
[C++] vector STL method 시간복잡도
서론
80000coding.oopy.io
https://blog.naver.com/yoochansong/221739086178
C++ STL container 시간 복잡도 및 특징 비교.
==============&#...
blog.naver.com
https://sunho-doing.tistory.com/entry/CC-C-STL-deque
[C++] STL - deque
deque 덱은 벡터와 비슷한 배열 기반 시퀀스 컨테이너로서 반복자 및 멤버 함수가 거의 유사하다. 벡터와 다른 점은 덱은 push_front()와 pop_front()가 가능하다는 점이다. #include #include using namespace std;
sunho-doing.tistory.com
| 2873 롤러코스터 [C++] (0) | 2023.08.26 |
|---|---|
| C++ 벡터, 문자열 삽입 및 삭제 연산 자료 (0) | 2023.07.30 |
| 16197 두 동전 [C++] (0) | 2023.06.29 |
| 11404 플로이드 [c++] (0) | 2023.06.25 |
| 2841 외계인의 기타연주 [C++] (0) | 2023.06.14 |
https://www.acmicpc.net/problem/2873
2873번: 롤러코스터
첫째 줄에 가장 가장 큰 기쁨을 주는 롤러코스터는 가장 왼쪽 위 칸부터 가장 오른쪽 아래 칸으로 어떻게 움직이면 되는지를 출력한다. 위는 U, 오른쪽은 R, 왼쪽은 L, 아래는 D로 출력한다. 정답
www.acmicpc.net
#include <iostream>
#include <string>
#define MAX 1000
using namespace std;
int main(int argc, char** argv) {
int R, C;
int arr[MAX][MAX];
string str = "";
//제일 작은 기쁨을 가진 검은 칸
pair<int, int> MinHappyPos; //좌표
int MinHappyVal = MAX; //기쁨값
cin >> R >> C;
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
//cout << "i: " << i << " j: " << j << '\n';
cin >> arr[i][j];
//현재 칸이 검은 칸이고 지금 기쁨값보다 작을 때
if (arr[i][j] < MinHappyVal && ((i+j)%2==1) ) {
//갱신해주기
MinHappyPos.first = j; //x
MinHappyPos.second = i; //y
MinHappyVal = arr[i][j]; //기쁨값
}
}
}
if (R % 2 == 1) {
//1) 세로가 홀수이고 가로가 짝수일 때
//횡방향(<-->)으로 이동
for (int i = 0; i < R; i++) {
for (int j = 0; j < C - 1; j++) {
if (i % 2 == 1) str += 'L';
else str += 'R';
}
if(i!=R-1) str += 'D';
}
}
else if (C % 2 == 1) {
//2) 세로가 짝수이고 가로가 홀수일 때
//종방향(↑↓)으로 이동
for (int i = 0; i < C; i++) {
for (int j = 0; j < R - 1; j++) {
if (i % 2 == 1) str += 'U';
else str += 'D';
}
if (i != C- 1) str += 'R';
}
}
else {
//3) 세로 가로 모두 짝수일 때
int MinR = (MinHappyPos.second % 2==0) ? MinHappyPos.second : MinHappyPos.second - 1;
int MinC = MinHappyPos.first;
//1. 검은칸이 있는 두 줄의 행까지 다다르기 전
//횡방향(<-->)으로 이동
for (int i = 0; i < MinR; i++) {
for (int j = 0; j < C - 1; j++) {
if (i % 2 == 1)str += 'L';
else str += 'R';
}
if (i != R - 1) str += 'D';
}
//2. 검은칸이 있는 두 줄의 행까지 다다른 후 (검은 칸 만나기 전)
for (int i = 0; i < MinC; i++) {
if (i % 2 == 1)str += "UR";
else str += "DR";
}
//3. 검은칸이 있는 두 줄의 행까지 다다른 후 (검은 칸 만난 후)
for (int i = MinC; i < C-1; i++) {
if (i % 2 == 1)str += "RU";
else str += "RD";
}
//4. 나머지 칸 (끝 점 까지)
for (int i = MinR + 2; i < R; i++) {
str += 'D';
for (int j = 0; j < C - 1; j++) {
if (i % 2 == 1)str += 'R';
else str += 'L';
}
}
}
cout << str;
}
참고자료
알고리즘(C++) / 백준 2873 : 롤러코스터
2873 www.acmicpc.net/problem/2873 2873번: 롤러코스터 첫째 줄에 가장 가장 큰 기쁨을 주는 롤러코스터는 가장 왼쪽 위 칸부터 가장 오른쪽 아래 칸으로 어떻게 움직이면 되는지를 출력한다. 위는 U, 오른
se-jung-h.tistory.com
https://www.slideshare.net/Baekjoon/baekjoon-online-judge-2873
Baekjoon Online Judge 2873번 풀이
choi@startlink.io https://www.acmicpc.net/problem/2873 • R * C • (1, 1) -‐> (R, C) • • https://www.acmicpc.net/problem/2873 • R C https:/...
www.slideshare.net
| C++ STL 컨테이너, string 클래스 함수 시간복잡도 (2) | 2023.10.22 |
|---|---|
| C++ 벡터, 문자열 삽입 및 삭제 연산 자료 (0) | 2023.07.30 |
| 16197 두 동전 [C++] (0) | 2023.06.29 |
| 11404 플로이드 [c++] (0) | 2023.06.25 |
| 2841 외계인의 기타연주 [C++] (0) | 2023.06.14 |
https://n.news.naver.com/mnews/ranking/article/020/0003517132?sid=001
| 흙탕물 밥 먹는 노숙인 보고, 그는 가난한 환자들의 ‘우산’이 됐다 (0) | 2023.06.25 |
|---|---|
| 강수진 “나는 ‘성장 중독’… 실력 느는 단원들 보면서 무한한 행복 느껴”[파워인터뷰] (0) | 2023.06.25 |
| 스타벅스 가서, "제일 안 팔리는 걸로 주세요"[남기자의 체헐리즘] (0) | 2023.06.25 |
백준 풀때 자꾸 헷갈려서 여기 두고 참고하기로 했다
https://blockdmask.tistory.com/338
[C++] string 클래스, 문자열에 대해서 (총정리)
안녕하세요 BlockDMask 입니다.오늘은 C++의 std::string 클래스(문자열)에 대해서 세세 하게 알아볼것 입니다.예전 글을 보다가 제가 작성한 이 문서를 보게 되었는데요, 너무 내용이 빈약하다고 생각
blockdmask.tistory.com
https://cho001.tistory.com/164
C++ 벡터 특정 원소 지우는 방법 vector.erase(),remove() 등 Tips
1. Erase를 활용하는 방법 벡터 v에서 i번째 원소를 삭제하고 싶다면 erase 함수를 사용하면 된다. erase 함수의 인자는 iterator 즉, 지우고 싶은 원소의 주소이다. http://www.cplusplus.com/reference/vector/vector/e
cho001.tistory.com
| C++ STL 컨테이너, string 클래스 함수 시간복잡도 (2) | 2023.10.22 |
|---|---|
| 2873 롤러코스터 [C++] (0) | 2023.08.26 |
| 16197 두 동전 [C++] (0) | 2023.06.29 |
| 11404 플로이드 [c++] (0) | 2023.06.25 |
| 2841 외계인의 기타연주 [C++] (0) | 2023.06.14 |
https://www.acmicpc.net/problem/16197
16197번: 두 동전
N×M 크기의 보드와 4개의 버튼으로 이루어진 게임이 있다. 보드는 1×1크기의 정사각형 칸으로 나누어져 있고, 각각의 칸은 비어있거나, 벽이다. 두 개의 빈 칸에는 동전이 하나씩 놓여져 있고,
www.acmicpc.net
#include <iostream>
#include <algorithm>
#define MAX 20
using namespace std;
struct coin{
int x;
int y;
};
int ans = -1;
int N,M;
int dx[4] = {0,0,-1,1};
int dy[4] = {-1,1,0,0};
char map[MAX][MAX];
void dfs(coin a,coin b, int cnt)
{
if((a.x<0 || a.x>= M||a.y<0||a.y>=N) || (b.x<0||b.x>=M|| b.y<0||b.y>=N)){
if(ans==-1){ans = cnt;}
else{ ans = min(ans,cnt);}
}
if(cnt >= 10) return;
for(int i=0;i<4;i++){
int aTx = a.x+dx[i];
int aTy = a.y+dy[i];
int bTx = b.x+dx[i];
int bTy = b.y+dy[i];
if((aTx<0 || aTx>= M||aTy<0||aTy>=N) &&(bTx<0||bTx>=M|| bTy<0||bTy>=N)){
continue;
}else if(map[aTy][aTx] == '#'&&map[bTy][bTx]== '#'){
}else{
if(map[aTy][aTx] == '#'){
coin B= {bTx,bTy};
dfs(a,B,cnt+1);
}else if(map[bTy][bTx] == '#'){
coin A = {aTx,aTy};
dfs(A,b,cnt+1);
}else{
coin A = {aTx,aTy};
coin B = {bTx,bTy};
dfs(A,B,cnt+1);
}
}
}
}
int main(int argc, char *argv[])
{
cin >> N >> M;
coin a,b;
bool flag = false;
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
cin >> map[i][j];
if(map[i][j] == 'o' ){
if(!flag){
flag = true;
a.x = j; a.y = i;
}else{
b.x = j; b.y = i;
}
map[i][j] = '.';
}
}
}
dfs(a,b,0);
cout << ans;
}| 2873 롤러코스터 [C++] (0) | 2023.08.26 |
|---|---|
| C++ 벡터, 문자열 삽입 및 삭제 연산 자료 (0) | 2023.07.30 |
| 11404 플로이드 [c++] (0) | 2023.06.25 |
| 2841 외계인의 기타연주 [C++] (0) | 2023.06.14 |
| 1181 단어 정렬 [c++] (0) | 2023.06.11 |
#include <iostream>
#include <vector>
#include <algorithm>
#define fastio ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define INF 1e9
#define MAX 101
using namespace std;
int N, M;
int graph[MAX][MAX];
int main(int argc, char** argv)
{
fastio
cin >> N;
cin >> M;
for (int r = 1; r <= N; r++) {
for (int c = 1; c <= N; c++) {
if (r == c)graph[r][c] = 0;
else graph[r][c] = INF;
}
}
for (int i = 0; i < M; i++) {
int a, b, cost;
cin >> a >> b >> cost;
if (graph[a][b] != 0 && graph[a][b] != INF) {
graph[a][b] = min(graph[a][b], cost);
}
else {
graph[a][b] = cost;
}
}
for (int k = 1; k <= N; k++) {
for (int r = 1; r <= N; r++) {
for (int c = 1; c <= N; c++) {
if (r == c)continue;
graph[r][c] = min(graph[r][c], graph[r][k] + graph[k][c]);
}
}
}
for (int r = 1; r <= N; r++) {
for (int c = 1; c <= N; c++) {
if (r == c || graph[r][c] == INF) cout << 0;
else cout << graph[r][c];
cout << ' ';
}
cout << '\n';
}
return 0;
}| C++ 벡터, 문자열 삽입 및 삭제 연산 자료 (0) | 2023.07.30 |
|---|---|
| 16197 두 동전 [C++] (0) | 2023.06.29 |
| 2841 외계인의 기타연주 [C++] (0) | 2023.06.14 |
| 1181 단어 정렬 [c++] (0) | 2023.06.11 |
| 16928 뱀과 사다리 게임 [c++] (0) | 2023.06.09 |
https://www.youtube.com/watch?v=kBgnIJUfQak
1. Package Manager에서 Netcode for GameObjects 설치
2. github에서 facepunch transport url을 다운받아 network manager 스크립트에
facepunch transport 넣기
3. game networkmanager 스크립트를 생성해 영상대로 쓰기
4. 스팀 키기 (안키면 null 참조 오류 뜬다)
5. 버튼에 gamenetworkmanager의 starthost() 바인딩하기
6. 실행 후 create host 버튼을 누르기
* ( networkmanager 싱글톤 클래스가 null로 참조되는 오류가 있어 거기 부분은 주석처리 해줬더니 잘 실행됐다.
원인은 잘 모르겠음ㅠㅠ)
punchface는 여기 분이 잘 설명해 주셔서 이것도 첨부.
https://dev-anz.tistory.com/15
Facepunch.Steamworks 더 쉬운 스팀 라이브러리
유니티에서 쓸 수 있는 Steam SDK C# 포팅버전을 검색하면 먼저 접하는 것이 Steamworks.Net이다.C++로 작성된 원래 Steamworks 라이브러리를 고대로 C#으로만 옮긴 것이기 때문에메소드 이름이나 인터페이
dev-anz.tistory.com
| 리눅스(우분투) GitHub 사용법 (0) | 2023.05.29 |
|---|---|
| 뮤텍스 관련 자료들 (0) | 2023.05.07 |
| C언어 스레드 참고자료 (1) | 2023.04.12 |
| mysql /var/run/mysqld/mysqld.sock 없는 문제 (0) | 2023.04.03 |
| 게임서버 공부 사이트 (0) | 2023.03.19 |