TIL

2022.10.15.(土)

Unsung 2022. 10. 15. 15:20

CS50

선형탐색 알고리즘

c언어로 배열 내 숫자포함 유무 확인하기

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    int numbers[6] = {4, 8, 15,16, 23, 42};

    for (int i=0; i<6; i++)
    {
        if(numbers[i]==50)
        {
            printf("Found\n");
        }
    }
    printf("Not found\n");
}

 

다른 언어에서는 가능하지만,
C언어에서 아래의 코드처럼 == 연산자를 이용해 문자열을 비교하는 것은 안된다.

// 에러

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    stirng names[4] = {"Ace", "Bed", "Cat", "Dog"};

    for (int i = 0; i<4; i++)
    {
        if(names[i] == "Ace")
        {
            printf("Found\n";)
        }
    }
    printf("Not Found\n";)
}

 

이를 해결하기 위해 strcmp 함수 사용 : 두 문자열이 같다면 0을 반환한다.
return을 표기해서 한번만 실행되게 한다.

#include <cs50.h>
#include <stdio.h>
#include <string.h>

int main(void)
{
    string names[4] = {"Ace", "Bed", "Cat", "Dog"};

    for (int i = 0; i<4; i++)
    {
        if(strcmp(names[i], "Dog") == 0)
        {
            printf("Found\n");
            return 0;
        }
    }
    printf("Not Found\n");
    return 1;
}

 

전화번호부를 만들기

#include <cs50.h>
#include <stdio.h>
#include <string.h>

int main(void) {
    string names[4] = {"Ace", "Bed", "Cat", "Dog"};
    string numbers[4] = {"234-432-234", "567-765-567", "123-321-123", "890-098-890"};

    for (int i=0; i<4; i++)
    {
        if (strcmp(names[i], "Ace") == 0)
        {
            printf("%s\n", numbers[i]);
            return 0;
        }
    }
    printf("Not found\n");
    return 1;
}

 

그러나 이름과 번호를 따로 저장하는 것은

어느 번호가 어느 사람의 것인지 알기 어렵고, 정렬이 필요한 경우 엇나갈것이다.

자료형을 새로 만들어

처음부터 이름과 번호를 같이 저장하는 방식을 사용해보기

#include <cs50.h>
#include <stdio.h>
#include <string.h>

// 새로운 타입 지정
typedef struct
{
    string name;
    string number;
}
person;

int main(void) {

    person people[4];

    people[0].name = "Ace";
    people[0].number = "234-432-234";

    people[1].name = "Bed";
    people[1].number = "567-765-567";

    people[2].name = "Cat";
    people[2].number = "123-321-123";

    people[3].name = "Dog";
    people[3].number = "890-098-890";

    for (int i=0; i<4; i++)
    {
        if (strcmp(people[i].name, "Ace") == 0)
        {
            printf("%s\n", people[i].number);
            return 0;
        }
    }
    printf("Not found\n");
    return 1;
}

 

GetString을 이용해 동적으로 만들어보기

#include <cs50.h>
#include <stdio.h>
#include <string.h>

// 새로운 타입 지정
typedef struct
{
    string name;
    string number;
}
person;

int main(void) {

    person people[4];

    people[0].name = "Ace";
    people[0].number = "234-432-234";

    people[1].name = "Bed";
    people[1].number = "567-765-567";

    people[2].name = "Cat";
    people[2].number = "123-321-123";

    people[3].name = "Dog";
    people[3].number = "890-098-890";


    string s = get_string("Input:");

    for (int i=0; i<4; i++)
    {
        if (strcmp(people[i].name, s) == 0)
        {
            printf("%s\n", people[i].number);
            return 0;
        }
    }
    printf("Not found\n");
    return 1;
}

모던 Javascript 튜토리얼

 

코드구조

  • 세미콜론을 기준으로 구문을 구분한다.
  • 코드블록이나 구성문법 끝엔 세미콜론을 붙이지 않아도 괜찮다! 붙이더라도 무시되기 때문에 에러가 생기지 않는다.
alert('Hello'); alert('World');

alert('Hello')
alert('World')

 

엄격모드

  • 최상단에 배치해야한다.
  • 자동으로 엄격모드를 활성화하는 모던 기능이 있다.
'use strict';

...

 

변수

  • 선언방식
    • let : 재할당 가능, 재선언 불가
    • const : 재할당/재선언 불가 - 상수 정의에 이용
    • var : 재할당/재선언 가능
  • 첫 글자 숫자 불가, 특수기호는 $와 _만 사용
  • 동적 타이핑을 허용하여, 자료형을 바꿔가며 값 할당 가능

 

자료형

  • 숫자형
  • BigInt형 : 아주 큰 숫자
  • 문자형
  • 불린형
  • null : 비어있음을 명시적으로 표기
  • undefined : 값이 할당되지 않은 상태
  • 객체형 : 복잡한 자료구조 저장
  • 심볼형 : 고유한 식별자
// typeof 연산자
typeof null == "object" // 언어 자체의 오류
typeof function() == "function" // 자료형으로 존재하지 않으나, 특별 취급

 

상호작용

  • prompt(질문, 프롬프트창 기본값) : 입력 후 확인 누를 시 입력값 반환, 취소는 null 반환
  • confirm(질문) : 확인 누를 시 true, 취소 누를 시 false 반환
  • alert(메시지) : 얼럿창
💛 모달창이 닫힐 때까진, 코드 실행 중지

 

연산자

  • 산술 연산자 : + - * /
  • 할당 연산자 : = *=
  • 비트 연산자 : 인수를 32비트 정수로 변환하여 이진 연산 수행
  • 조건부 연산자 : w ? t : f
  • 논리 연산자 : && ||
  • nullish 연산자 : a ?? b (a가 null이나 undefined가 아니라면 a, 맞다면 b)
  • 비교연산자 : == > <

 

반복문

  • while
while (조건이 **truthy**일 동안) {
 // 반복문 본문(body)의 코드를 계속 실행한다.
}
  • do-while : 코드를 반드시 한번 실행함
do {
 // 반복문 본문(body)의 코드를 일단 실행해라!
} while (조건이 **truthy**일 동안);
  • for
for (begin;, condition;, step) {
 //반복문 본문(body)
}

실행순서

  1. 시작 begin : 반복문에 진입할 때 딱 한번 실행된다.
  2. 조건 condition : 반복마다 확인되는 조건
  3. 본문 body : 조건이 truthy일 동안 계속 실행
  4. 단계 step : 본문 실행 후에 실행

 

switch문

let a = +prompt("1~3사이 숫자를 입력하세요.","");

switch(a) {
  case 1:
		alert("1을 입력했습니다.");
    break;

  case 2:
		alert("2를 입력했습니다.");
    break;

  case 3:
		alert("3을 입력했습니다.");
    break;

  default:
		alert("잘못된 입력입니다.");
}

 

함수

1. 함수 선언문

function sayHello() {
  alert( '안녕하세요!' );
}

sayHello();  // 안녕하세요!

2. 함수 표현식

let sayHello = function() {
  alert("Hello");
}

sayHello(); // Hello

3. 화살표 함수 : 표현식을 평가 후 반환함!

let 변수 = (인수1, 인수2) => 표현식;

'TIL' 카테고리의 다른 글

2022.10.21.(金)  (0) 2022.10.21
2022.10.18.(火)  (0) 2022.10.18
2022.10.13.(木)  (0) 2022.10.13
2022.10.12.(水)  (0) 2022.10.12
2022.9.29.(木)  (0) 2022.09.29