목록분류 전체보기 (217)
Study hard

https://www.acmicpc.net/problem/2745 2745번: 진법 변환 B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 www.acmicpc.net [풀이] N에 'ZZZZZ'와 같은 문자열이 올 수 있으므로 string에 N값을 입력하였다. N의 각 자릿수마다 (B^(자릿수)) * (해당 자리의 수)를 반복하여 모두 합하여 풀었다. B가 11이상이고 수가 10 이상이면 위의 연산을 하기 전에 원래 숫자로 바꿔줘야 한다. #include #include #include //pow using namespace std; string N; int B..

https://www.acmicpc.net/problem/11005 11005번: 진법 변환 2 10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 �� www.acmicpc.net [풀이] 어떤 수를 2로 계속 나눠서 그 나머지들로 이진수를 얻는 것처럼 N을 B로 계속 나눠서 그 나머지를 저장하여 한꺼번에 출력하는 방법을 썼다. 가장 마지막에 저장된 나머지부터 출력되기 때문에 stack을 사용하였다. 출력할 때 11진법 이상이고, 나머지가 10이상이면 문제에 있는 대로 알파벳 대문자를 대신 출력하도록 해주었다. #include #include using names..

https://www.acmicpc.net/problem/9613 9613번: GCD 합 문제 양의 정수 n개가 주어졌을 때, 가능한 모든 쌍의 GCD의 합을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 t (1 ≤ t ≤ 100)이 주어진다. 각 테스트 케이스는 한 줄로 �� www.acmicpc.net [풀이] 이중for문으로 원소가 2개인 중복없는 쌍들을 만들 수 있다. GCD는 유클리드 호제법으로 풀었다. 72 = 34 * 2 + 4 34 = 4 * 8 + 2 4 = 2 * 2 72, 34의 최대공약수: 2 #include #include using namespace std; int t, n; int Num[101];//양의 정수 n개 저장 vectorPair;//최대 공약..

https://www.acmicpc.net/problem/2609 2609번: 최대공약수와 최소공배수 첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다. www.acmicpc.net [풀이] 최대 공약수는 아래와 같은 유클리드 호제법으로 풀 수 있다. 60 = 36 * 1 + 24 36 = 24 * 1 + 8 24 = 8 * 3 자연수 A, B의 최소 공배수는 최대 공약수 * 최소 공배수 = A * B임을 이용하여 알 수 있다. #include using namespace std; //유클리드 호제법 int getGCD(int A, int B) { int R; while (B != 0) { R = A % B; A = B; B = R; } re..

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; //원 이어주기 ..