목록백준 (183)
Study hard
https://www.acmicpc.net/problem/1168 1168번: 요세푸스 문제 2 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 100,000) www.acmicpc.net [풀이] 이 문제는 이전의 요세푸스 문제와 같이 링크드 리스트로 풀면 시간초과가 난다. (∵매 회 포인터가 K-1번 움직임) 따라서 vector와 moduler를 사용하여 그때그때 K번째 번호를 출력하고 벡터에서 지워주는 방식으로 풀었다. #include #include using namespace std; int N, K; vectorv;//남은 사람들 void input() { cin >> N >> K; for (int i = 1; i
https://www.acmicpc.net/problem/1158 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net [풀이] 링크드 리스트로 풀었다. 자기 자신의 번호와 다음 사람의 주소로 이루어진 구조체 배열을 만들어 현재 사람에서부터 K번째에 있는 사람을 찾아다니며 제거해주었다. #include #include using namespace std; struct Person { int Num;//자기 번호 Person *next;//다음 사람 번호 }; Person P[5001]; vectorRemove;//원에서 제거되는 순서 Person *nowP;//현재 위치 int N, K; //원 이어주기 ..
https://www.acmicpc.net/problem/1406 1406번: 에디터 문제 한 줄로 된 간단한 에디터를 구현하려고 한다. 이 편집기는 영어 소문자만을 기록할 수 있는 편집기로, 최대 600,000글자까지 입력할 수 있다. 이 편집기에는 '커서'라는 것이 있는데, 커서는 www.acmicpc.net [풀이] 처음엔 string의 erase, insert를 사용하여 풀어보았는데, 시간초과가 났다. erase와 insert의 시간복잡도가 string 길이가 N일 때 약 O(N)이 걸리기 때문에 시간이 초과된 것 같다. string으로 푼 코드 #include #include using namespace std; string str; char Cmd; string PushWord; int Cur..
https://www.acmicpc.net/problem/11656 11656번: 접미사 배열 첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000보다 작거나 같다. www.acmicpc.net [풀이] 1. C++ STL string의 내장 함수인 substr을 사용하여 모든 접미사를 vector에 저장한다. 2. vector을 C++ STL algorithm의 내장 함수인 sort로 정렬한다. #include #include #include #include //sort using namespace std; string str; vectorv;//접미사 저장 void solution() { cin >> str; int Len = str.size(); for (int..
https://www.acmicpc.net/problem/10824 10824번: 네 수 첫째 줄에 네 자연수 A, B, C, D가 주어진다. (1 ≤ A, B, C, D ≤ 1,000,000) www.acmicpc.net [풀이] 1. A,B,C,D를 string으로 받는다. 2. A 뒤에 B를, C 뒤에 D를 붙여준다. (+연산) 3. A와 C를 자연수로 변환해주고 더해준다. ※주의할 점 A,C를 int형으로 바꿀 경우 범위에서 벗어날 수도 있다. 따라서 long long으로 바꿔준다. #include #include using namespace std; string A, B, C, D; long long Num1 = 0, Num2 = 0; void solution() { cin >> A >> B >..
https://www.acmicpc.net/problem/11655 11655번: ROT13 첫째 줄에 알파벳 대문자, 소문자, 공백, 숫자로만 이루어진 문자열 S가 주어진다. S의 길이는 100을 넘지 않는다. www.acmicpc.net [풀이] ASCII코드표를 참고하여 알파벳 범위를 넘었을 때만 잘 처리해주면 된다. #include #include using namespace std; string str; void solution() { getline(cin, str); for (int i = 0; i = 65 && str[i] = 97 && str[i] 90 && str[i] 122) ch = 'a' + (str[i] +..