. 정규화

 

https://mjn5027.tistory.com/46

 

[ Database ] 제 1정규화, 제 2정규화, 제 3정규화

정규화란? 데이터베이스의 데이터들을 최대한 중복을 제거하여 이상 현상 ( Anomaly ) 을 방지하​기 위한 기술이다. ​ 여기서 말하는 이상현상은 세 가지가 있는데 간략하게 설명하면 다음과 같

mjn5027.tistory.com

https://yaboong.github.io/database/2018/03/09/database-normalization-1/

 

데이터베이스 정규화 - 1NF, 2NF, 3NF

개요 데이터베이스 정규화에서 1NF, 2NF, 3NF 에 대해 알아본다.

yaboong.github.io

 

여기를 보면 더 간단

 

 1NF, 2NF, 3NF 가 있다, nf는 층

 

정규화(Normalization)

 

관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화라고 한다.

 

중복 때고, 분류 잘하고, 꼬이지않게 한다.

 

정규형에는 BCNF, 4NF, 5NF, 6NF 도 추가로 있다 하는데

비공식적으로는 3nf까지하면 정규화 했다 한다고 한다

3NF 테이블의 대부분이 삽입, 변경, 삭제 이상이 없으며, 3NF 테이블의 대부분이 BCNF, 4NF, 5NF이다.

 

이해는 잘 안가

 

 

이후 후술

 

 

 

 

 

 

 

'내배캠 TIL WIL > 내배캠 wil' 카테고리의 다른 글

내배캠 5주차 wil  (0) 2022.12.26
내배캠 4주차 wil 납기는 철저히  (0) 2022.12.19
내배캠 3주차 wil  (0) 2022.12.11
내배캠 WIL 2주차  (0) 2022.11.27
내배캠 노드4기 1주차 wil  (0) 2022.11.20

금일은 30일날 했던 특강의 복습을 정리하겠습니다

어디까지나 내용의 전파가 아니라 나의 비망록인점 미리 고지합니다

 

오늘 안하면 내일 팀 과제 못내.....

 

1. cmd로 mysql 접속

 

강의에선

 

$ mysql -u root -p 명령어 입력

아래 Enter password: 에 비밀번호 입력(비밀번호 입력하여도 터미널에서 안 보입니다.) 후 엔터

인데 연결이 안돼서 몇일을 앓은 결과 글쌔

 

cd C:\Program Files\MySQL\MySQL Server 8.0\bin

이걸 안해줘서 mysql 인식을 못하더라

 

프로그램이 깔려있는 위치를 정확히 넣도록 합시다

 

2. workbench , dbeaver 접속

 

워크벤치를 실행시키고

MySQL Connections + 누른 후

connection name - local_db(본인이 입력하고 싶은이름으로) hostname - 127.0.0.1 port - 3306 password - store in keychain - mysql 설치시 입력한 비밀번호 입력 ok - 클릭

 

이건 간단

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

API란 무엇인가

 

API는 정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘입니다.

예를 들어, 기상청의 소프트웨어 시스템에는 일일 기상 데이터가 들어 있습니다.

휴대폰의 날씨 앱은 API를 통해 이 시스템과 ‘대화’하여 휴대폰에 매일 최신 날씨 정보를 표시합니다.

-출처 아마존 AWS

 

다른 프로그램에서 데이터를 긴빠이(쌔빈거 아님) 쳐와 표시하는 것

 

작동방식

 

API는 Application Programming Interface(애플리케이션 프로그램 인터페이스)의 줄임말

 

API의 맥락에서 애플리케이션이라는 단어는 고유한 기능을 가진 모든 소프트웨어를 라는 뜻

인터페이스는 두 애플리케이션 간의 서비스 계약이라고 할 수 있다

이 계약은 요청과 응답을 사용하여 두 애플리케이션이 서로 통신하는 방법을 정의한다.

API 문서에는 개발자가 이러한 요청과 응답을 구성하는 방법에 대한 정보가 들어 있다

-출처 아마존 AWS

 

과거 기초반 수업때는 그냥 공시된 것 들고오는 줄 알았느넫 아니다

 

 

종류 

 

Open API

 

공개 API,누구나 쓸 수 있다,반대는 프라이빗

 "하나의 웹 사이트에서 자신이 가진 기능을 이용할 수 있도록 공개한 프로그래밍 인터페이스가 오픈 API다"라고 정의할 수 있다"- 우리말샘 사전 우리말샘 - 오픈 API 서비스 소개 (korean.go.kr)

 

우리말샘 - 오픈 API 서비스 소개

1. 우리말샘 오픈 API 서비스 소개 우리말샘 오픈 API는 검색 플랫폼을 외부에 공개하여 다양하고 재미있는 서비스 및 애플리케이션을 개발할 수 있도록 외부 개발자와 사용자들이 공유하는 프로

opendict.korean.go.kr

 

강의에선 빠르고 유연한 비즈니스 구축/ 비즈니스 품질 향상/생태계 확립을 장점으로 들었다

 

우리나라는 공공데이터포털을 통해 도로명 주소 조회 서비스, 동네예보정보조회서비스등 오픈API 2,506건을 2018년 현재 운영 및 제공하고 있다. 와 좋아라

 

오픈스트리트맵은 무료지만 구글은 맵 서비스를 전면 유료화 방침이라는데 api가 무료면 아무나 가져갈 테니

사용량 생각하면 그게 맞는거 같기도 함

 

REST API

 

 Representational State Transfer의 줄임말

 

REST는 클라이언트가 서버 데이터에 액세스하는 데 사용할 수 있는

GET, PUT, DELETE 등의 함수 집합을 정의합

클라이언트와 서버는 HTTP를 사용하여 데이터를 교환합- amazon aws

 

강의에선

"자원을 이름(자원의 표현)으로 구분해 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미합니다.

즉, **자원(resource)의 표현(representation)에 의한 상태 전달을 뜻합니다."

 

따로보면 이해가 안됐는데 

 

문서, 그림, 데이터, 해당 소프트웨어 자체 등모든 자원을 건들고

그 자원을 표현하는 이름(테이블에 묶거나 해서 분류하면 이름을 태그해야하니)

요청되는 시점에 데이터를 전달 ( JSON 혹은 XML을 통해 데이터를 주고 받는 것이 일반적 )

REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에,

웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일입니다. 라고 설명했다 라고 강의에서 설명

 

아마존에선 

REST API의 주된 특징은 무상태입니다.

무상태는 서버가 요청 간에 클라이언트 데이터를 저장하지 않음을 의미합니다.

서버에 대한 클라이언트 요청은 웹 사이트를 방문하기 위해 브라우저에 입력하는 URL과 유사합니다.

서버의 응답은 웹 페이지의 일반적인 그래픽 렌더링이 없는 일반 데이터입니다.

라고

 

킹무위키에선

 

REST는 모든 '네트워크'를 위한 것이므로 네트워크가 구성된 곳이라면 어느 곳이든 사용이 가능하지만 현실적으로 99.99%의 네트워크는 우리가 소위 '인터넷'이라고 부르는 HTTP 기반 네트워크이므로 REST API라고 하면 HTTP에 쓰이는걸 의미하는 경우가 많다. 심지어 그냥 'API'라고 부르면 이 REST API를 의미하는 경우도 많아졌다.

 

일단 네트워크에서 받으면 레스트다 로 이해하면 뉴비는 되나?

 

남의 것 가져오는 것인 만큼 출처표기 같은것도 중요한 모양인데 기업체에선 전문적으로 그거 검수하는

사람도 있는 모양, 소송 당하기 쉽겠다

 

 

동?부 아님

 

1. DB의 개념

 

‘데이터의 집합’, 그걸 관리하는게 DBMS(Database Management System)

 

https://hongong.hanbit.co.kr/데이터베이스-이해하기-databasedb-dbms-sql의-개념/

라고 해요

db는 SQL이라는 언어로 돌아간다. 웹 기초때 보길 잘 했는데 기억은 안남

시퀄이라고도 읽는다. 언어는 맞지만 프로그래밍 언어와는 좀 다름

 

https://hongong.hanbit.co.kr/데이터베이스-이해하기-databasedb-dbms-sql의-개념/

 

막상 보니 SQL과 NoSQL이 있다

 

sql: 엑셀처럼 이미 만들어진 틀에(데이터 스키마)에 저장

MySQL, PostgreSQL, Oracle

  장점은 명확하게 정의된 스키마-용도,데이터의 무결성

  중복없이 한번만 저장하는 데이터 관계

 

  단점은 수정하기 어렵고 유연하지 않음

   관계 떄문에 조인문이 많은 복잡한 쿼리가 생성

   수직적 확장 위주로만 가능함

 

NoSQL: 더 자유로운 형태로 저장, 스키마가 없어서

Firestore, MongoDB, Redis 등

 

장점:

스키마가 없으니 유연하고 언제든지 데이터 조정가능, 새 필드 생성

애플리케이션이 원하는 형태로 데이터가 저장되기 떄문에 읽는 속도 빠름

수직수평 확장이 가능해 모든 읽기쓰기요청(애플리가 요청하는 가능

 

단점

너무 유연해서 데이터 구조결정 미루게 됨

중복 데이터 계속 작성해야함

데이터가 여러 컬렉션에 중복되어 있기 때문에 수정 시 모든 컬렉션에서 수행해야 함

-(SQL에서는 중복 데이터가 없으므로 한번만 수행이 가능)

 

몽고디비는 확실히 스키마가 없긴 했다

 

 

2. db의 암묵적 규칙

 

이름 잘 짓기

 

기본

소문자를 사용한다. 실수할 일이 적고 MySQL은 대소문자를 구분하기에 통일해준다.

Space 즉 띄어쓰기는 Underscore _ 로 대체한다.

숫자는 허용하지 않는다.

컬럼의 의미를 설명가능한 이름이며 64자를 넘지 않는다.

prefix를 사용하지 않는다.

 

4,5번째가 중요해보인다

 

db는 단수형으로 짓자, db가 1개 데이터의 모음을 나타나게 되어서, 그냥 단수해 제발

그렇게 배웠음, 얘도 가능한한 prefix는 피한다.

 

테이블 이름은 아래와 같다

 

소문자 사용. 이러저런 부연 설명이 있지만 이해할 필요가 없다

단수형- 이거저거 있어도 하나의 독립체라 단수형

prefix사용. 비슷한 이름이 많을 수 있어서 겹치고 그런 일도 있어서

 

필드이름(컬럼)

 

소문자만 , 스페이스 금지, 숫자 금지, prefix 금지

짧게 max 2단어

쉽게

기본키는 id 혹은 <table_name>_id의 형태를 따른다.

단어를 거꾸로 쓰는 일은 피하자(date_signup(x), date_create(x), signup_date(o), created_date(o))

컬럼명과 테이블이름을 동일하게 하는 피한다.

축약형, 연결형, 두음형은 피한다.

외래키를 사용한다.

외래키 컬럼명에는 참조하는 테이블의 이름을 사용한다.

 

https://velog.io/@peppermint100/MySQL-Naming-Convention-번역

참조

 

 

 

기초강의 떄는 쉬웠는데 왜 이렇게 꼬였냐

코딩테스트 어렵다

 

첫 문제

코딩테스트 연습 - 각도기 | 프로그래머스 스쿨 (programmers.co.kr)

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

def solution(angle):
    if angle < 90:
        return 1
    elif angle == 90:
        return 2
    elif angle < 180:
        return 3
    else:
        return 4      

앵글을 자체기능으로 주는 줄 모르고 range 걸어서 틀렸었음

 

옷가게

 

코딩테스트 연습 - 옷가게 할인 받기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

def solution(price):
    if price >= 500000:
        answer = price * 0.8
    elif price >= 300000:
        answer = price * 0.9
    elif price >= 100000:
        answer = price * 0.95
    else:
        answer = price

    return round(answer, -2)

라고 써서 35퍼 맞았다

 

어디가 조졌나 봤더니 10만 미만 같아서

 

def solution(price):
    if price >= 500000:
        answer = price * 0.8
    elif price >= 300000:
        answer = price * 0.9
    elif price >= 100000:
        answer = price * 0.95
    else:
        answer = price

    if price >= 100000:
        return round(answer, -2)
    else:
        return price

값에도 분기문 걸었는데 45퍼

그럼 소숫점,2자리까지 떼지 말자

def solution(price):
    if price >= 500000:
        answer = price * 0.8
    elif price >= 300000:
        answer = price * 0.9
    elif price >= 100000:
        answer = price * 0.95
    else:
        answer = price

    return answer

90퍼 까지 도달했을 때

 

100 왜 아님?

 

def solution(price):
    if price>=500000:
        price = price *0.8
    elif price>=300000:
        price = price *0.9
    elif price>=100000:
        price = price * 0.95
    return int(price)

 

100퍼는 이거라는데 앤써로 적어서 문제냐?

 

 

369

 

결국 3의 배수 3,6,9가 포함되는 만큼 박수쳐라

 

 

def solution(order):
    answer = 0
    for i in str(order):
        if i in ["3","6","9"]:
            answer+=1        
    return answer

기껏 했는데 같은 사람 많다

def solution(order):
    return sum(map(lambda x: str(order).count(str(x)), [3, 6, 9]))

 

그 와중에 진짜 비친 양반이 한줄로...

 

한줄 한줄 직관적인 개소리다

 

 

def solution(id_pw, db):
    for i in db:
        if id_pw[0] in i:
            if id_pw[1] == i[1]:
                return "login"
            else:
                return "wrong pw"
        if id_pw[0] != i[0] and id_pw[1] != i[1]
          return "fail"

 

틀렸음 ㅅ오ㅅ

모두가 앓는 소리를 내는 재귀함수

저도 경험해 보겠씁니다

 

자기자신을 호출하는 함수를 재귀함수라 한다

말만 들으면 일반적인 논리로는 왜 쓰는지 이해할 수가 없다

이미 있잖아, 어캐 또 부름

 

1. 기초

 

 

주어진 예제는 보신각 카운트 다운

 

def count_down(number):
    print(number)          # number를 출력하고
    count_down(number - 1) # count_down 함수를 number - 1 인자를 주고 다시 호출한다!


count_down(60)
 
전혀 머리에 든게 없는 싱싱 돌대갈에 코드 문맹인데도 불구하고
영어만 알면 뭔 소린지 알 수 있는 직관적인 코드다
 
깔쌈하게 60부터 역으로 숫자를 세고 - 하나 까고- 다시 프린트 하고----------------
 
근데 틀렸다고 한다

사유, 0을 넘어서면 마이너스로 가서 끝없이 센다

recursion 에러라고

 

그래서 명확하게 끝나는 지점을 설정해줘야 에러없이 끝난다고

 

def count_down(number):
    if number < 0:         # 만약 숫자가 0보다 작다면, 빠져나가자!
        return

    print(number)          # number를 출력하고
    count_down(number - 1) # count_down 함수를 number - 1 인자를 주고 다시 호출한다!


count_down(60)

분기를 미리 만들어 주는게 중요한데 왜 미리 쓰면 바로 머리에 안들어올까

 

 

2.심?화

 

팩토리얼을 넣어보자

 

종이로 풀 땐 쉬운 팩토리얼

3! 은 3 * 2 * 1 = 6,        4! 는 4 * 3 * 2 * 1 = 4 * 3! = 24

ㅇㅇ 맞음

 

즉 n! = n(n-1)(n-2)...................1이니까

재귀함수에 걸맞다고 내준것 같다

 

def factorial(n):
    # 이 부분을 채워보세요!
    return 120


print(factorial(5))

 

주어진 코드

 

def factorial(n):
    if n <= 0:
        break
    return n * factorial(n - 1)


print(factorial(5))

라고 썼는데 틀림

사유는 SyntaxError: 'break' outside loop

검색을 하니

break for while 아래에서밖에 못 쓴다고 외우시면 될 것입니다. 그래서 "break outside loop"가 오류인 겁니다.

라고 알려준다

 

def factorial(n):
    if n <= 0:
        return 1
    return n * factorial(n - 1)


print(factorial(5))

이렇게 해봤다

답은 맞았다 

 

원 예제에서는 if n == 1:로 해결했다

훨씬 스마트해보인다

 

 

3. 회문검사

 

회문 잘안다. 우영우 놀이를 어린이들이 너무 많이 함.

 

ㅇㅇ palindrome라네요

 

검사하려면 맨 앞글자-막 글자

1번=n-1번

이카면 되겠죠?

 

홀짝 따로 구분해야하는지 불안감이 엄습하기 시작하는데

종료시점 어떻게 줄지 감이 안간다

 

input = "abcba"


def is_palindrome(string):
    return True


print(is_palindrome(input))

왜 파이참은 복붙 시 박스 주고 vs코드는 박스 안줄까

 

input = "자꾸만꿈만꾸자"


def is_palindrome(string):
    n = len(string)
    #으로 내용물 겟수 세줌,''쓰면 한 물건으로 치니 주의
    for char in range(n):
    #숫자 범위 준다,0번째 ㅜ번째 비교, 1번째 ㅜ-1번째비교라
        if string[char] != string[n - char - 1]:
            #진짜 물건이 같은지 비교후 아닐때
            return False

    return True


print(is_palindrome(input))

대충 맞았다

 

뭔가 뭔가임

파이썬 기초부터 다시봐야한다는 결론에 도착했습니다

 

토요일에 일어나니 뭐가 뭔 용도인지 전혀 기억이 안나요

 

미안하다 세금아! 미안하다 코드스파르타!

'내배캠 TIL WIL > 내배캠 wil' 카테고리의 다른 글

내배캠 5주차 wil  (0) 2022.12.26
내배캠 4주차 wil 납기는 철저히  (0) 2022.12.19
내배캠 3주차 wil  (0) 2022.12.11
내배캠 WIL 2주차 (정규화)  (0) 2022.12.04
내배캠 노드4기 1주차 wil  (0) 2022.11.20

강창민 튜터님 강의를 보며 다시 정리하는 방식으로 갑니다

 

스택과 큐

 

스택이란

 

LIFO(Last In First Out)의 성격을 가진 자료구조를 스택이라고 한다

마지막에 들어간 자료가 먼저 나오는 구조, 빨래통에서 빨래를 꺼내는 것과 같다

 

이게 꼬이면 유명한 스택 오버플로우가 되는데, 반복문에서 종료조건을 잘못 지정하거나

지정하지 않았을 때 생긴다.-그러면 무한루프가 발생하기도 하는데 메모리의 스택영역이

계속 쌓여 터진다고 한다.

 

한번 체험해보는 것도 좋겠지만 어떤식으로 터지는지 몰라 하지 않기로.

 

모바일 앱 들에서  뒤로가기를 할 때 자주 사용한다고 하는데 (스택을 사용함)

뒤로가기를 눌러직전에 호출한 화면을 쓰기 때문이라고

그 뿐만아니라 LIFO(Last In First Out)의 성격을 가진 자료구조를 스택이라고 한다.

 

역순의 성질을 사용해야 될 때 유용

 

대표적 기능은

 

픽- 스택의 최 상단 데이터를 볼때 사용

푸시- 스택에 원소를 삽입하는 행위를 칭함, 원소는 맨 위로 간다

팝-스택의 top에서 원소를 가져오는 행위, 방금 위에 푸쉬했던 데이터가 나올것

 

 

큐 (Queue)

 

큐는 스택과는 다르게 FIFO(First In First Out)의 성격을 가진 자료구조

처음 들어간 자료가 먼저나오는 자판기 같은 구조

 

예제로는 접속대기열,인쇄 대기열을 주셨다.

서버에서 여유가 생기면 먼저 온 순서대로 보내주니까

주의점은 새로고침 시 순번 맨 뒤로

 

 

 

 

 

공간복잡도

 

내가 알던 것 - 의미없다

정리하면서 안 것 - 다 메모리 기술 발전 덕이다, 아주 중요하던 시절은 이와타 사토루 SFC 깎던 시절 이야기

 

def largest_product(my_list):
    products = []
  for a in my_list:
    for b in my_list:
    # products 배열에 원소가 들어가는 연산은 (a * b)번이 실행되겠죠? 2 루프!
      products.append(a * b)
  return max(products) # 따라서, products의 공간 복잡도는 O(N^2)

가 주어진 예시

 

깊숙히 찾다가 가변공간, 고정공간 개념을 배웠는데

 

가변= 알고리즘 실행과 관련있는 공간으로실행 중 동적으로 필요한 공간 (문제의 인스턴스에 따라 가변적인 메모리 공간)

고정= 알고리즘과 무관한 변수,상수,코드저장

 

 

링크드리스트- 중요한건 내일 함

 

배열과 비슷하나 원소의 삽입.삭제가 장점

배열은 좀더 속도가 빠르고 값을 가져옴

 

반대로 링크드는 값을 조회하는데 나약하다

특정 노드(리스트의 원소)로 가려면 노드 전체 배열의 순서를 타고와랴 한다

일일히 방문하는 만큼 상대적으로 느림

 

시간복잡도는 배열이 O(1) 링크드리스트가 O(N)

 

 

 

 

 

 

 

 

 

 

 

 

입력값과 문제를 해결하는 데 걸리는 시간과의 상관관계를 말한다

입력값이 2배로 늘어났을 때 문제를 해결하는 데 걸리는 시간은 몇 배로 늘어나는지를 보는 것

입력값이 늘어나도 걸리는 시간이 덜 늘어나는 알고리즘이 좋은 알고리즘이겠다

 

방법 두개를 배웠다

 

예시는 "최댓값 찾기 알고리즘"의 시간 복잡도 판단해보기

input = [3, 5, 6, 1, 2, 4]


def find_max_num(array):
    for num in array:
        for compare_num in array:
            if num < compare_num:
                break
        else:
            return num


result = find_max_num(input)
print("정답 = 6 / 현재 풀이 값 = ", find_max_num([3, 5, 6, 1, 2, 4]))
print("정답 = 6 / 현재 풀이 값 = ", find_max_num([6, 6, 6]))
print("정답 = 1888 / 현재 풀이 값 = ", find_max_num([6, 9, 2, 7, 1888]))

이 파일은 숫자를 다른 숫자들과 하나하나 비교해 최대값을 찾는다, max면 중단함

 

시간이 얼마나 걸릴지 분석법은 '한줄이 실행되는걸 1번의 연산이라 생각' 하란다

 

for num in array:  # array 의 길이만큼 아래 연산이 실행
    for compare_num in array:  # array 의 길이만큼 아래 연산이 실행
        if num < compare_num:  # 비교 연산 1번 실행
            break
    else:
        return num

그래서 (어레이[입력값] 길이만큼 연산)**2*비교연산이 되는데

어레이 길이 6, 비교연산 1번 

6*6번이 실행된다

36으로는 표현하지 않는다, 

위에서 입력값은 보통 N으로 쓰는데 ,N의 크기와 시간의 상관관계를 시간복잡도라해서

수식으로 표현. 숫자가 얼마나 큰지 보다는 거점사이에 여러길 있는 문제 마냥 이해하면 될것같다

 

두번쨰

 

def find_max_num(array):
    max_num = array[0]        
    for num in array:      
        if num > max_num:  
            max_num = num
    return max_num

result = find_max_num(input)
print("정답 = 6 / 현재 풀이 값 = ", find_max_num([3, 5, 6, 1, 2, 4]))
print("정답 = 6 / 현재 풀이 값 = ", find_max_num([6, 6, 6]))
print("정답 = 1888 / 현재 풀이 값 = ", find_max_num([6, 9, 2, 7, 1888]))

리스트를 하나씩 돌면서 num 과 max_num 값을 비교하는 함수

 

max_num = array[0]  # 연산 1번 실행

for num in array:  # array 의 길이만큼 아래 연산이 실행
    if num > max_num:  # 비교 연산 1번 실행
        max_num = num  # 대입 연산 1번 실행

 

주어진 걸로만 보자면

  1. max_num 대입 연산 1번
  2. array의 길이 X (비교 연산 1번 + 대입 연산 1번)

아랫 거는 if라 되는거 하나, 안되는거 하나 총 2개

 

즉1.과 2.을 합쳐 1+2*N

2N+1만큼 걸림

 

참고로 같은 함수다.

 

아예 다른 계산식이 나와 버리는데

 

 

식만 보자

 

제곱이라 입력값 변동이 조금만 생겨도 어마어마한 차이가 난다

 

나무위키를 보니 방식도 참 많은데

1에선 거의 대동소이하다

 

나도 하면서 이걸 왜 신경쓰는가 생각했는데 위키 예시에서 쓰는 사람은 수초~수분 걸리는데 불편을 몰라도

유저 입장에선 다른거 찾는다길레 바로 중요도를 이해했다.

 

가장 적게 시간이 걸릴 방식을 찾아서 단련해야하는데 알다 모르겠다

 

 

 

+ Recent posts