코딩 36

[백준][C] 2581. 소수

https://www.acmicpc.net/problem/2581 예제 입력 60 100 예제 출력 620 61 해결 방법 m부터 n까지 반복해야 하기 때문에 반복문을 만들었습니다. 또한 소수의 합을 저장할 변수 sum도 만들었습니다. 만일 m이 1인 경우, 1은 소수가 아니기에 잘못된 계산을 피하기 위하여 m++; 으로 건너뛰도록 작성하였습니다. 또한 for 문은 m부터 시작하여 n까지 반복되기에 가장 작은 소수를 저장할 first 변수를 0으로 만들고 초기화한 후 반복문 진행 중 소수이면서 first가 0인 경우 그 수를 first에 저장하도록 하였습니다. 처음 first에 저장된 수가 그 범위 내에서 가장 작은 소수가 되겠죠. 다음에 더 큰 수가 소수가 되어도 이미 first가 0이 아니기 때문에 ..

코딩/백준 2022.10.04

[백준][C] 1978. 소수 찾기

예제 입력 4 1 3 5 7 예제 출력 3 해결 방법 소수는 1과 나 자신을 제외한 모든 수들로 나누어떨어지지 않는 수입니다. 이 사실을 바탕으로 코드를 작성합니다. 첫째 줄에 숫자의 개수가 주어지므로, 소수를 판별하는 과정을 n번 반복합니다. 소수임을 판단하는 isprime 변수를 1로 지정한 후, 2부터 (자기 자신 - 1)까지 나누어보는 for문을 반복합니다. 나누어떨어지는 경우가 생길 경우 그 수는 소수가 아닌 것이기에 isprime = 0으로 만들어 줍니다. 그리고 for 문이 끝난 후 isprime의 값을 검사하여 1일 경우 소수의 개수를 저장한 변수 cnt에 +1을 해 주는 방식으로 작동합니다. 그리고 isprime 변수는 다음 들어올 숫자를 위하여 1로 다시 지정해줍니다. 코드 #inclu..

코딩/백준 2022.10.04

[백준][C] 2839. 설탕 배달

예제 입력 18 예제 출력 4 해결 방법 방법 A : 우선 더 큰 봉지인 5킬로그램으로 전체 무게가 나누어떨어지는지 확인합니다. 방법 B : 그렇지 않을 경우, 3킬로그램으로 한 번 덜어내고 위 조건문을 다시 반복합니다. 5킬로그램으로 확인하는 이유는 다음과 같습니다. 18킬로그램을 기준으로, 18은 5로 나누어떨어지지 않기 때문에 더 작은 봉지로 덜어내어 18 - 3을 한 후 다시 확인합니다. 15 / 5는 5으로 나누어떨어지며 그 몪은 3이기에, 필요한 봉지는 1 + 3 = 4봉지입니다. 3킬로그램으로 나누어떨어지는지 확인하면 18 / 3 = 6으로 최소 개수가 아닌 결과가 나오기 때문에, "최소 개수"를 출력하기 위해 5킬로그램으로 확인하였습니다. 또한 만들 수 없는 경우도 위 방법으로 확인할 수 ..

코딩/백준 2022.10.04

[백준][C] 2869. 달팽이는 올라가고 싶다.

https://www.acmicpc.net/problem/2869 예제 입력 2 1 5 예제 출력 4 해결 방법 시간 제한이 0.15초로 걸려있기 때문에, 아래와 같은 방법으로 코드를 짜면 시간 초과에 걸리게 됩니다. #include int main() { int a, b, v, date=0, h=0; scanf("%d %d %d", &a, &b, &v); while (1){ date++; h += a; if (h >= v) break; h -= b; } printf("%d", date); } A미터 올라간 후 B미터 미끄러지므로, 하루 전체에 올라가는 높이는 (A - B)m 입니다. 정상에 올라간 날에는 다시 아래로 미끄러지지 않으므로, 식을 (V - B) / (A - B)으로 짭니다. 나누어떨어지는 ..

코딩/백준 2022.10.03

[백준][C] 1712. 손익분기점

https://www.acmicpc.net/problem/1712 예제 입력 1000 70 170 예제 출력 11 해결 방법 판매 대수와 무관하게 드는 고정 비용 a, 하나를 판매할 때 드는 재료비/인건비 b, 가격을 저장할 변수 c를 만듭니다. 노트북 하나를 판매하고 남는 돈은 (c - b)만원 입니다. 만일 b가 c보다 크거나 같으면, 팔 때 이익이 존재하지 않게 되니 손익분기점이 없습니다. -1을 출력합니다. c가 b보다 큰 경우, 하나를 판매할 때마다 (c - b)만원씩 이익을 보게 되므로 손익분기점을 알기 위해서는 (고정 비용 / (c - b)), 즉 고정 비용을 이익으로 나눈 것의 몪에 1을 더해주면 됩니다. 이익을 보는 금액이 고정 비용을 "넘어서야" 하므로 1을 더해주는 것입니다. 코드 #..

코딩/백준 2022.10.03

[백준][C] 2941. 크로아티아 알파벳

https://www.acmicpc.net/problem/2941 주어진 문자열이 몇 개의 크로아티아 알파벳으로 이루어져 있는지 체크하는 문제입니다. 예제 입력 ljes=njak 예제 출력 6 해결 방법 크게 두 가지 방법으로 생각했었습니다. - 앞글자가 c, d, l, n, s, z인 경우에 if문으로 그 다음 알파벳이 =, -, j등인지 판별하여 크로아티아 문자열 찾기 - 뒷글자가 =, -, j 인 경우에.. (생략) 두 번째 방법이 더 코드를 간결하게 작성할 수 있어 두 번째 방법을 사용하였습니다. 우선 단어의 수를 저장할 변수 word를 글자 수와 동일하게 지정한 다음, 두 글자가 크로아티아 단어가 되는 경우에는 그 개수에서 1을 빼고, 세 글자가 크로아티아 단어가 되는 경우(dz=)에는 단어 개..

코딩/백준 2022.10.03

[C] 문자열 끝까지 반복문을 돌리는 법

크게 두 가지 방법이 있습니다. I. NUL 문자를 읽기 전까지 반복하기 c언어에서 문자열을 저장하게 되는 경우를 생각해 봅시다. str[] = "Hello"와 같이 저장할 때, 메모리 공간에는 str[0] str[1] str[2] str[3] str[4] str[5] H e l l o \0 과 같이 저장됩니다. 이때 맨 끝에 있는 \0이 널 문자로, 문자열의 끝을 나타내는 특수 문자로 쓰입니다. 문자열의 끝을 나타내는 문자 전의 인덱스까지만 반복하도록 코드를 작성하면 됩니다. int i = 0; char str[10] = "Hello" while (str[i] != NULL){ // blah blah blah i++; } 출처 : http://www.ktword.co.kr/test/view/view.p..

코딩/기타 2022.10.03

[백준][C] 5622. 다이얼

https://www.acmicpc.net/problem/5622 다이얼을 금 핀이 있는 곳까지 일정한 시간이 걸린다고 할 때, 전화를 걸기 위한 최소 시간을 구하는 코드를 작성해야 합니다. 예제 입력 WA 예제 출력 13 해결 방법 시간을 세기 위한 변수 t를 우선 만들었습니다 또한, 숫자 1까지 도달하는 데에 걸리는 시간이 2초이므로 그 다음 숫자에 도달하기까지는 더 오래 걸리겠죠. 이것을 기억하여 코드를 작성하면 됩니다. 저는 문자를 입력받아 정수를 리턴하는 dial 함수를 따로 만들어 해결하였습니다. 특정 알파벳까지 도달하는지 몇 초 소요되는지 미리 switch 문으로 만들어 두고, 리턴되는 값(소요 시간)을 변수 t에 더하면 되겠죠. 코드 #include int dial(char a); int ..

코딩/백준 2022.10.03

[백준][C] 2908. 상수

https://www.acmicpc.net/problem/2908 예제 입력 734 893 예제 출력 437 해결 방법 단계별로 풀어보기에는 텍스트로 분류되어 있지만 간단한 수학 계산으로 풀 수 있습니다. 일단 숫자 2개를 받을 정수형 변수 n1, n2를 만들어 줍니다. 수 734를 예로 들어보면, 734의 백의 자리 7을 구하는 법 : 734를 100으로 나눈 몪을 구하면 되므로 734 / 100을 해 줍시다. 734의 십의 자리 3을 구하는 법 : 734를 우선 10으로 나누면 몪은 73입니다. 73을 10으로 나눈 나머지가 3이 되므로 (734 / 10) % 10을 해 줍시다. 734의 일의 자리 4을 구하는 법 : 734를 100으로 나눈 나머지는 34입니다. 34를 10으로 나눈 나머지가 4가 ..

코딩/백준 2022.10.03

[백준][C] 1152. 단어의 개수

https://www.acmicpc.net/problem/1152 예제 입력 The Curious Case of Benjamin Button 예제 출력 6 해결 방법 우선 단어의 개수를 저장할 변수 word와 문자열을 저장할 배열 str을 만들어 주었습니다. 그리고 scanf 대신 gets 함수로 문자열을 저장하였습니다. 일반적으로 scanf("%s", str)과 같은 방식으로 문자열을 읽게 되면, 공백 부분을 입력받을 수 없게 됩니다. 따라서 그 부분이 해결되는 gets 함수로 문자열을 읽었습니다. scanf로 공백 부분도 입력받고 싶으시다면, scanf("%[^\n]s", str)와 같은 방식으로 입력하시면 됩니다. 정규식을 이용한 방법이며 자세한 내용은 인터넷을 찾아보세요. 문자열을 처음부터 읽어나..

코딩/백준 2022.10.03