알고리즘
-
[BOJ / Python] 1158번 : 요세푸스 문제Study (etc)/Problem Solving 2022. 3. 4. 16:04
문제 요세푸스 문제는 다음과 같다. 1번부터 N번까지 N명의 사람이 원을 이루면서 앉아있고, 양의 정수 K(≤ N)가 주어진다. 이제 순서대로 K번째 사람을 제거한다. 한 사람이 제거되면 남은 사람들로 이루어진 원을 따라 이 과정을 계속해 나간다. 이 과정은 N명의 사람이 모두 제거될 때까지 계속된다. 원에서 사람들이 제거되는 순서를 (N, K)-요세푸스 순열이라고 한다. 예를 들어 (7, 3)-요세푸스 순열은 이다. N과 K가 주어지면 (N, K)-요세푸스 순열을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) 출력 예제와 같이 요세푸스 순열을 출력한다. solved.ac 레벨 실버 5 풀이 자료구조 중 '큐'를 사용..
-
[BOJ / Python] 2896번 : 무알콜 칵테일Study (etc)/Problem Solving 2022. 3. 4. 14:02
문제 상근이와 지수는 마트에서 오렌지 주스, 사과 주스, 파인애플 주스를 구매했다. 그들은 인터넷에서 찾은 방법으로 무알콜 칵테일을 만들어 학교에서 팔려고 한다. 하지만, 칵테일을 만드는 방법을 찾기 전에 주스를 구매했기 때문에, 주스가 남을 수도 있다. 무알콜 칵테일을 만드는데 필요한 오렌지, 사과, 파인애플 주스의 비율과 구매한 주스의 양이 주어진다. 칵테일을 최대한 많이 만들었을 때, 각 주스가 얼만큼 남는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 구매한 오렌지, 사과, 파인애플 주스의 양 A, B, C가 주어진다. (1 ≤ A, B, C ≤ 500) 둘째 줄에 칵테일을 만드는데 필요한 각 주스의 비율 I, J, K가 주어진다. (1 ≤ I, J, K ≤ 50) 출력 첫째 줄에 칵테일을 최대..
-
[BOJ / Python] 1157번 : 단어공부Study (etc)/Problem Solving 2022. 2. 8. 20:46
문제 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. 입력 첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다. 출력 첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다. 풀이에 들어가기에 앞서... 이 문제를 풀며 첫 풀이에는 시간 초과가 떴다. 이 문제의 시간 제한은 2초다. 먼저, 처음 시도한 방법에 대해서 다뤄보자. 내가 이 문제를 처음 접하고 생각한 요점은 다음과 같다. A~Z의 개수를 알아야 하니 리스트 혹은 딕셔너리로 26개 알파벳의..
-
[BOJ/C] 1712번 : 손익분기점Study (etc)/Problem Solving 2022. 1. 27. 18:09
햇수로 치면 3년만의 BOJ 포스팅이다. 그동안 무기력증에 빠져 자기계발이든 뭐든 소홀히 했었는데, 이제서라도 뭔가 해보자고 자리에 앉았다. 아무튼, 이번에 풀어본 문제는 아마 내가 처음 풀어보는 수학적 문제가 아닌가 싶다. 문제 월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 인건비 등 총 B만원의 가변 비용이 든다고 한다. 예를 들어 A=1,000, B=70이라고 하자. 이 경우 노트북을 한 대 생산하는 데는 총 1,070만원이 들며, 열 대 생산하는 데는 총 1,700만원이 든다. 노트북 가격이 C만원으로 책정되었다고 한다. 일반적으로 생산 대수를 늘려 가다 ..
-
[BOJ / C] 2577번 : 숫자의 개수Study (etc)/Problem Solving 2019. 5. 20. 11:41
- 숫자의 개수 - 문제설명 이 문제를 풀며- 세자리수 곱셈의 결과는 정수형의 범위 내에서 충분히 해결할 수 있다. - 곱한 결과를 % 10 연산을 하게 되면 일의 자리의 수를 구할 수 있고, 해당 일의 자리 숫자를 카운트 한 뒤, 원래의 값을 10으로 계속 나눠주어 자릿수를 줄여나간다. - 0에서 9까지의 수의 개수를 카운트 해야 하는데 이는 배열의 인덱스와 정확히 일치한다. 그러므로 배열[일의 자리 수]로 인덱싱하여 해당 배열 요소의 값을 1씩 증가시킨다. - 자세한 것은 소스코드 참고. 내 소스 #include int main() { int input; int mul=1, result = 0; int cnt[10] = { 0, }; for (int i = 0; i < 3; i++) { scanf("..
-
[BOJ / C] 1924번 : 2007년Study (etc)/Problem Solving 2019. 5. 12. 11:27
- 2007년 - 문제설명 이 문제를 풀며- 1월 1일이 월요일이라는 것을 기준으로, 입력한 날짜만큼 일수를 더해 그 일수를 7로 나눈 나머지를 이용하여 요일을 판별하자. 각 달의 일수는 배열로 따로 저장해주었다.- x달 만큼 y에 일수를 더해줄 for문을 사용하였다.- y를 7로 나눈 나머지로 요일을 판별해줄 switch ~ case 문을 이용하였다. 요일을 포인터 배열을 이용하여 푸신 분의 예제도 본 적 있지만, 포인터 개념에 대한 이해가 부족한 관계로 간단한 switch ~ case 문으로 분기하였다. 내 소스 #include int main() { int x, y; int month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; scanf("%..
-
[BOJ / C] 11718번 : 그대로 출력하기Study (etc)/Problem Solving 2019. 5. 6. 15:51
- 문제 이름 입력하기- 문제설명 이 문제를 풀며- fgets라는 입력 함수를 사용해보기로 했다. fgets는 개행문자 (\n)이 올 때까지, (n-1) 개의 '문자열'을 입력받는다. 띄어쓰기가 들어가도 상관이 없다. 공백이 있을 경우 false를 반환하므로 while문에 넣어서 사용해보기로 했다. 내 소스 #include int main() { char str[101]; while(fgets(str,101,stdin)) printf("%s",str); return 0; } 채점 결과