개발 지식/알고리즘 35

[백준] 10250 ACM 호텔

문제 : https://www.acmicpc.net/problem/10250 간단히 말하면, H x W (세로 x 가로) 개수의 호텔방이 있고 왼쪽 아래부터 위쪽으로 채우고, 다 채우면 오른쪽 1층부터 다시 채워나가는 방법 입니다. 층수는 H를 C로 나눈 나머지가 됩니다. 단 나머지가 0일 경우에는 H를 출력해야 합니다. 호수는 H를 C로 나눈 몫+1 이 됩니다. 단 나누어 떨어지는 경우는 몫을 출력합니다. 이 생각을 기반으로 해서 코드를 짜 보았습니다. 1234567891011121314151617181920212223242526#include int main(){ int num,H,W,C,Front,Back; scanf("%d",&num); for(int i=0;i

[백준] 1834 나머지와 몫이 같은 수

문제 : N으로 나누었을 때 나머지와 몫이 같은 모든 자연수의 합을 구하시오. 예) N=3일때 나머지와 몫이 같은 자연수는 4하고 8이므로, 답은 12이다. 이 문제는 간단한 점화식으로 풀이가 가능합니다. N=2 일경우 3이 가능하고 N=3 일경우 4하고 8이 가능합니다. N=4 일경우 5하고 10하고 15가 가능합니다. 그럼 여기서 점화식을 유추해 볼 수 있습니다. 문제의 답은 조건을 만족하는 모든 자연수의 합 이므로 N에 대한 점화식은 으로 유추해 볼 수 있습니다. (1부터 N-1까지 더한 수에 N+1 을 곱한다.) 더 간단히 나타내야 하는데, 프로그래밍으로 유추하다 보니까 코드가 조금 보기 이상해졌습니다. (함수 dd 를 만들어 유추해서 만들다가 코드가 더러워짐ㅠ) 123456789101112131..

[백준] 1152 단어의 개수

문제 : 영어 대소문자와 띄어쓰기만으로 이루어진 문자열이 주어집니다. 이 문자열의 단어의 개수를 구하세요. 단어는 띄어쓰기로 구분합니다. 문자열 앞 뒤에 공백이 있을 수 있습니다. 제 문제 해결법은 이렇습니다. 이 문제는 문자열을 받는 문제이므로 fgets 함수를 쓰겠습니다. 그리고 맨 앞에 있을 수 있는 공백을 따로 처리해줍니다. 마지막으로, 공백이 여러 개 붙어 있을경우 세지 않는단 조건을 추가해 줍니다. 123456789101112131415161718192021222324252627282930#include int main(){ int count,i=0; char array[1000001]; fgets(array,sizeof(array),stdin); if(array[0]==' ') { count..

[백준] 2839 설탕 배달

문제 : 설탕봉지는 3kg과 5kg 봉투가 있습니다. 설탕을 배달할 때에 정확히 n kg 배달해야 하고, 최대한 적은 봉투를 써야합니다. 예를들어, 18kg 의 설탕을 배달할 때에 3kg 6개를 들고가도 되지만 5kg 3개와 3kg 1개를 들고가면 적은 봉투로 배달이 가능합니다. 또한, 4kg 같이 3kg봉투와 5kg봉투로 꽉 채우지 못하거나 남는 경우에는 배달이 불가능합니다. 이 때는 -1을 출력합니다. 이 때, n kg의 설탕을 배달할 때 최소로 필요한 봉투의 개수를 출력하세요. 나의 접근법은 이러하다. (내 생각도 중요하지만 당신의 생각도 중요합니다. 내가 무조건 정답은 아닙니다.) n이 5의 배수일경우엔 n/5를 출력하면 된다. 5kg의 봉투로 다 담아서 배달하면 가장 최소가 되기 때문이다. 괜히..