반응형

이 문제의 예시는 숫자 5를 입력했을 때 처음에 별이 9개가 출력되고 홀수 간격으로 7, 5, 3, 1 개수의 별이 출력이 되며 다시 홀수 간격으로 증가한다. 

이 부분을 보고 임의의 숫자를 입력했을 때 처음 별은 몇 개를 출력해야하는지 규칙을 찾아보는 방법은 아래와 같이 하였다.

 

 

표를 보고 알게된 규칙은 처음 출력되는 별의 개수가 입력한 숫자 * 입력한 숫자 - 1 이라는 것이다. 다음은 구현한 코드이다.

 

/*
* Author : Jeonghun Cho
* Date : March 23, 2020
*/
 
#include <stdio.h>
 
int main() {
    int inputNumber;
    scanf("%d"&inputNumber);
    int star = inputNumber * 2 - 1;
 
    for(int i=0; i<inputNumber; i++){
        for(int j=0; j<i; j++){
            printf(" ");
        }
        for(int k=0; k<star; k++){
            printf("*");
        }
        star -= 2;
        printf("\n");
    }
    
    star = 3;
    
    for(int i=inputNumber-2; i>=0; i--){
        for(int j=0; j<i; j++){
            printf(" ");
        }
        for(int k=0; k<star; k++){
            printf("*");
        }
        star += 2;
        printf("\n");
    }
    
 
    return 0;
}
\

 

반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 8958 OX퀴즈 (C언어)  (0) 2020.03.27
[백준] 7568 덩치 (C언어)  (0) 2020.03.24
[백준] 2523 별찍기 - 13 (C언어)  (0) 2020.03.18
[백준] 5543 상근날드 (C언어)  (0) 2020.03.17
[백준] 2675 문자열 반복 (Java)  (0) 2019.12.06
반응형

임의의 숫자를 입력 받은 후에 약수를 출력하는 코드를 작성해보자.

참고로 약수란 식을 나누어 나머지가 없이 떨어지는 수를 의미한다. 쉽게 말해 나눈 결과의 몫이 0인것이다.

 

내가 입력한 수의 약수 찾는 방법

#include <stdio.h>
 
int main()
{
    int inputNumber;
    scanf("%d"&inputNumber);
    
    for(int i=1; i<=inputNumber; i++){
        if(inputNumber%i==0){
            printf("%d ", i);
        }
    }
 
    return 0;
}
 

 

약수를 찾는 방법은 1부터 시작하여 입력한 숫자까지 한번씩 모두 나누어보는 것이다. 이를 응용하여 입력한 수의 약수가 총 몇개인지 출력하는 코드를 작성해보자.


내가 입력한 수의 약수의 개수를 찾는 방법

#include <stdio.h>
 
int main()
{
    int inputNumber;
    int cnt = 0;
    scanf("%d"&inputNumber);
    
    for(int i=1; i<=inputNumber; i++){
        if(inputNumber%i==0){
            cnt++;
        }
    }
    printf("%d\n", cnt);
 
    return 0;
}

 

약수의 개수를 저장할 cnt변수를 0으로 초기화하였으며 if문의 조건값이 참일 경우 1씩 증가 시킨다.

반응형
반응형

많은 사람들이 아래와 같은 코드 문제를 해결하기 위해 이 글을 클릭했을 것이다.

분명히 변수 input에 love를 저장하고 if문을 사용하여 문자열 "love"를 비교하는 코드를 작성했는데 생각처럼 되지 않는다.

 

#include <stdio.h>
 
int main()
{
    char input[] = "love";
    
    if(input == "love"){
        printf("love");
    }else{
        printf("not love");
    }
    
    return 0;
}

 

그 이유는 == 연산자를 사용하여 문자열을 비교하는 것은 문자열을 비교하는 것이 아니라 배열 input과 문자열 love의 주소값을 비교하기 때문이다. 이 문제를 해결하기 위해서는 strcmp()함수를 사용하면 쉽게 해결할 수 있다. 함수 이름은 문자열을 비교하다(string compare)에서 따왔다.

 

#include <stdio.h>
 
int main()
{
    char input[] = "love";
    
    int result = strcmp(input, "love");
    
    printf("%d", result);
    
    return 0;
}

 

위 코드는 strcmp()함수를 사용하여 input변수에 들어있는 문자열과 "love"를 비교하고 리턴값을 result에 저장 후 출력하는 코드이다.

실행해보면 결과 값으로 0이 출력이된다. 비교하는 문자열이 같으니 일반적으로 생각했을 때 1이 출력되어야 할 것 같지만 strcmp()함수는 비교하는 대상이 같을 때 0을 리턴하는 함수이기 때문이다. 

 

#include <stdio.h>
 
int main()
{
    char input[] = "love";
    
    int result = strcmp(input, "love");
    
    if(!result){
        printf("love");
    }else{
        printf("not love");
    }
 
    return 0;
}
 

 

if문 조건값에 not 연산자인 !를 붙인 이유는 방금 말했듯이 비교하는 대상이 같으면 0을 리턴하므로 ! 연산자를 사용하여 논리값을 뒤집어서 1로 만들기 위함이다.

반응형

+ Recent posts