10951번
#include <stdio.h>
int main(){
int i = 1;
int j = 1;
while (1) {
scanf("%d %d", &i, &j);
if (i <0 || j > 10)break;
printf("%d\n", i + j);
}
return 0;
}
if문을 이용해서 범위 외의 값이 들어오면 break가 되도록 하였다.
하지만 출력초과...
찾아보니 EOF라는 새로운 개념이 들어있었다.
#include <stdio.h>
int main(){
int i = 1;
int j = 1;
while (scanf("%d %d", &i, &j)!=EOF){
printf("%d\n", i + j);
}
return 0;
}
EOF ==> end of file이라는 뜻으로 파일의 끝에 도달할 때까지 while문을 실행한다는 것이다.
이 조건을 써주지 않으면 scanf가 무한 루프를 돌아 메모리 할당 범위를 초과한다.
1110번
#include <stdio.h>
int main() {
int a, b, t, n;
int result = 0;
scanf("%d", &t);
while (t!=n) {
a = t / 10;
b = t % 10;
n = b * 10 + (a + b) % 10;
result += 1;
}
printf("%d", result);
return 0;
}
음 왜 while문에 조건을 넣고 돌리면 틀리고, True&if문을 써야 맞는지 알려주실분..? ㅠㅠ 나로써는 도저히 이해가 안된다.. 논리에 맞지 않는가??
나만의 착각인건가.
C언어 뉴비는 운다. 어쨌든 if문으로 다시 고쳐서 돌려보자.
#include <stdio.h>
int main() {
int a, b, t;
int n = 1;
int result = 0;
scanf("%d", &t);
while (1) {
a = t / 10;
b = t % 10;
n = b * 10 + (a + b) % 10;
result += 1;
if (n == t)break;
}
printf("%d", result);
return 0;
}
하... 왜 안되는거지. if문으로 바꿨는데도 안된다.
뭐야
해결햇다. 현재 위 코드에서 n의 흐름을 따라가보자. n이 들어가서 새로운 n 값이 할당되어야하는데 t로 이루어진 코드로 인해 n이 업데이트되고 있지 않다.
따라서 t를 n에 할당해주고, while문 내의 t를 n으로 변경해준다.
#include <stdio.h>
int main() {
int a, b, t, n;
int result = 0;
scanf("%d", &t);
n = t;
while (1) {
a = t / 10;
b = t % 10;
t = b * 10 + (a + b) % 10;
result += 1;
if (n == t)break;
}
printf("%d", result);
return 0;
}
2562번
#include <stdio.h>
int main() {
int a, b, num;
int count = 1;
scanf("%d", &a);
num = a;
for (int i=0; i < 9; i++) {
scanf("%d", &b);
if (num <= b) {
num = b;
count++;
}else { count++; }
}
printf("%d", count);
return 0;
}
아까의 문제와 같은 값이 들어올 때마다 max값을 변환하는 것이 아니다.
왜냐면 계속 값이 업데이트되면 count값이 9로 끝남...낄낄
그래서 배열을 만들어 값을 넣어야한다.
#include <stdio.h>
int main() {
int arr[9];
int max;
int count = 0;
for (int i = 0; i < 9; i++) {
scanf("%d", &arr[i]);
}
max = arr[0];
for (int i = 0; i < 9; i++) {
if (max < arr[i]) {
max = arr[i];
count = i;
}
}
printf("%d\n%d", max, count + 1);
return 0;
}
2577번
#include <stdio.h>
int main() {
int a[3];
for (int i = 0; i < 3; i++) {
scanf("%d", &a[i]);
}
int num = a[0] * a[1] * a[2];
//세 수의 곱을 만들어줌
//세 수의 곱을 문자열로 변환하고 싶음.
return 0;
}
세수의 곱을 문자열로 변환하고 싶은데 녹록치가 않다.
아무래도 파이썬은 내장함수가 있어서 편했는데, C언어는 그렇지가 않다.
//보다 간단하게 곱을 만들 수 있다.
#include <stdio.h>
int main() {
int a, b, c;
int arr[10] = {0, };
scanf("%d %d %d", &a, &b, &c);
int n = a*b*c;
여기까지가 곱을 만드는 과정이다.
int num;
while(n>0) { //예시 123
num = n%10; //123%10=3
arr[num]++; //arr[3]++
n /= 10; //123/10=12 --> n은 12가 되어 다시 while으로 돌아간다.
}
for(int i=0; i<10; i++) {
printf("%d\n", arr[i]); //출력
}
return 0;
}
이걸 어케 생각해...한번 해보는데까지 해봐야겠다...
3052번
#include <stdio.h>
int main() {
int arr[10] = { 0, };
for (int i = 0; i < 10; i++) {
scanf("%d", &arr[i]);
arr[i] %= 42;
}
//배열을 통해서 42이를 나눈 나머지를 arr에 넣었다.
int a[42] = { 0, };
for (int i = 0; i < 10; i++) {
int num = arr[i];
a[num]++;
}
//나머지가 존재하면 나머지의 자리에 1++된다.
//예시 --> 0이 존재 a[0]++ 되어 a[0]=1이 된다.
int count = 0;
for (int i = 0; i < 42; i++) {
if (a[i] != 0) {
count++;
}
}
//a에 들어있는 요소를 세어준다. 대신 0을 빼야한다.
printf("%d",count);
return 0;
}
한번에 성공했지만 더 간단한 방법이 있을 것 같다.
이중 for문을 이용해서 중복을 제거하는 방법을 찾았다.
내가 길게 늘여쓴 두개의 for문을 겹친것과 다름없다.
for(int i=0; i<10; i++) {
int count=0; // 초기화
for(int j=i+1; j<10; j++) { // 서로 같은 수일 경우
if(remain[i] == remain[j]) count++;
}
if (count == 0) result++; // 같은 수가 없을 경우 개수를 세준다
}
1546번
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int arr[1000];
for (int i = 0; i < n; i++) {
scanf("%d",&arr[i]);
}
// scanf로 인수를 받을 때 띄어쓰기를 통해서 구분하고 싶다. 어떻게 해야할까.
int max = arr[0];
for (int i = 0; i < n; i++) {
if (max < arr[i]) {
max = arr[i];
}
}
for (int i = 0; i < n; i++) {
arr[i] = arr[i] / max * 100;
}
int sum=0;
for (int i = 0; i < n; i++) {
sum += arr[i];
}
printf("%f", sum / n);
return 0;
}
arr 내부의 값이 소수가 될 수도 있기 때문에 double형 배열로 바꿔준다.
또 max를 찾아내는 for문을 위의 것과 합쳐 하나로 만들어준다. --> 시간이 절약됨.
int main() {
int n, max=0;
scanf("%d", &n);
double arr[1000];
for (int i = 0; i < n; i++) {
scanf("%d",&arr[i]);
if (max < arr[i]) {
max = arr[i];
}
}
%d(int)로 작성되어 있는 것들을 자료형과 맞게 %lf(double)로 고쳐준다.
아래의 max를 구하는 for문과 sum을 구하는 for문도 합쳐줄 수 있다.
#include <stdio.h>
int main() {
int n;
double arr[1000], max = 0, sum = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%lf", &arr[i]);
if (max < arr[i]) {
max = arr[i];
}
}
for (int i = 0; i < n; i++) {
arr[i] = arr[i] / max * 100;
sum += arr[i];
}
printf("%lf", sum/(double)n);
return 0;
}