Mario-more
problem link
문제 링크
https://cs50.harvard.edu/x/2024/psets/1/mario/more/
의사코드 작성
/*
1. 사용자에게 숫자 받기
2. 피라미드 출력 하기
2-1. 앞 공백 출력하기
2-2. 앞 # 출력하기
2-3. 중간 공백 출력하기
2-4. 뒤 # 출력하기
2-5. 줄바꿈
*/
실제 코드 구현
#include <cs50.h>
#include <stdio.h>
int main(void)
{
int n;
do
{
n = get_int("Height: ");
}
while (n < 1);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n - i - 1; j++)
{
printf(" ");
}
for (int k = 0; k <= i; k++)
{
printf("#");
}
printf(" ");
for (int l = 0; l <= i; l++)
{
printf("#");
}
printf("\n");
}
}
후기
처음 접근할 때 나눠서 생각하기 보다 한번에 풀리는 근사한 방법이 있을 것이라 생각했는데 그런 방법은 생각해내지 못했다.
쉬운 문제라고 생각해도 잘 쪼개서 접근하는게 더 좋은 방법일 것 같다. 근사한 방법은 그 이후에 나오는 것 같다.
Credit
problem link
문제링크
https://cs50.harvard.edu/x/2024/psets/1/credit/
의사 코드 작성
/*
1. 유저에게 카드 번호 받기
2. 카드 번호 길이 구하기
3. 카드 번호 첫 번째 숫자, 두 번째 숫자 구하기
4. 카드사 조건에 맞는지 확인하기
4-1. 조건에 맞다면 checksum 유효한지 확인하기
*/
실제 코드 작성
#include <cs50.h>
#include <stdio.h>
int get_length(long n);
int get_first(long n);
int get_second(long n);
bool checksum(long n);
int main(void)
{
long n = get_long("Number: ");
int length = get_length(n);
int first = get_first(n);
int second = get_second(n);
if (length == 15 && first == 3 && (second == 4 || second == 7))
{
if (checksum(n))
{
printf("AMEX\n");
}
else
{
printf("INVALID\n");
}
}
else if (length == 16 && first == 5 && (second >= 1 && second <= 5))
{
if (checksum(n))
{
printf("MASTERCARD\n");
}
else
{
printf("INVALID\n");
}
}
else if ((length == 13 || length == 16) && first == 4)
{
if (checksum(n))
{
printf("VISA\n");
}
else
{
printf("INVALID\n");
}
}
else
{
printf("INVALID\n");
}
}
int get_length(long n)
{
int length = 0;
while (n > 1)
{
n = n / 10;
length++;
}
return length;
}
int get_first(long n)
{
while (n > 10)
{
n = n/10;
}
return n % 10;
}
int get_second(long n)
{
while (n > 100)
{
n = n/10;
}
return n % 10;
}
bool checksum(long n)
{
int result = 0;
for (long i = 10; n / i > 1; i*=100)
{
int second_to_last = ((n / i) % 10) * 2;
if (second_to_last >= 10)
{
result += second_to_last / 10;
result += second_to_last % 10;
}
else
{
result += second_to_last;
}
}
for (long i = 1; n / i > 1; i*=100)
{
result += (n / i) % 10;
}
if (result % 10 == 0)
{
return true;
}
else
{
return false;
}
}
후기
생각보다 디버깅 작업을 많이 했다.
숫자의 크기를 생각하지 않고 int로 intger overflow 로 생긴 오류를 엄청 많이 겪은 문제였다.
메모리에 좀 더 신경 쓰자.
'입문 > CS50X' 카테고리의 다른 글
[CS50X] 2024 Week3 Algorithms (1) | 2024.02.23 |
---|---|
[CS50X] 2024 Week2 Arrays Problem Set 2 (Scrabble, Readability, Substitution) (0) | 2024.02.22 |
[CS50X] 2024 Week2 Arrays (0) | 2024.02.22 |
[CS50X] 2024 Week1 C (1) | 2024.02.21 |
[CS50X] 2024 Week0 Scratch (0) | 2024.02.20 |