'전체 글'에 해당되는 글 128건

  1. 2023.01.11 3차 함수와 알고리즘 1
  2. 2023.01.11 1차 함수와 가우스 기호 알고리즘 응용
  3. 2023.01.06 부동소수점
  4. 2021.08.18 완주하지 못한 선수
  5. 2021.01.09 The Python Challenge 4
반응형

이전 글에 이어서 이번에는 3차 함수를 다룬다.

 

16 번째 알파벳 부터 26번까지의 규칙이다.

이를 그래프에 나타내면

이러한 모양이 나오게 된다.

보고난후 내가 떠올린것은 3차 함수 였다.

 

고차함수의 그래프를 그리게 되면

이러한 함수를 그릴수 있고 20 ~22 까지의 y값을 9에 근사한 값으로 만들수 있었다.

알고리즘으로 나타내면

x=ord(i)-64
y= 1/8*(x-20)*(x-21)*(x-22)+9

이러한

그런데 잘생각해보면 이렇게도 풀수 있지만.. 전부 if문 돌린것과 시간이 비슷해버렸따...

반응형

'컴퓨터 공학' 카테고리의 다른 글

1차 함수와 가우스 기호 알고리즘 응용  (0) 2023.01.11
부동소수점  (0) 2023.01.06
Posted by 53C
,
반응형

백준 문제중...

["ABC","DEF","GHI","JKL","MNO","PQRS","TUC","WXYZ"]

이렇게 A,B,C 가 속한 위치를 판별하는 하나의 로직을 만났다.

 

우리가 알 수 있는 점은 중간에 있는 "PQRS","WXYZ"라는 문자열로 인해서 규칙을 생성할 수 없다.

하지만 {A - O} 까지의 알파벳은 수식을 통해서 판별이 가능해 보였다.

 

y=[x]

위 그래프는 처음 볼지라도....

고2때 아마 극한? 수렴을 배울때 속이 채워진 동그라미와 속이 채워지지 않은 동그라마를 통해서 수렴하는 값을 찾았던것 같다.....(다 까먹..)

 

우리는 저것과 매우 유사한 함수를 만들어야 했고, 만들었다.

 

아쉽게도 저 사이트에서는 가우스 기호를 인식하지 못한다.

하지만 오히려 더 좋은 그래프를 그릴수 있었다.

빨간 그래프에 집중을 하면,

보는 것처럼 x= 7 일때 y= 2.1667 ,x = 9 일때 y = 2.833 이다.

그리고 여기에 올림이나 내림을 적용한다면.... 초록색 그래프를 얻을 수 있다.

 

실제 프로그래밍을 해보자!

 

a= str(input())
for i in a:
    if ord(i)<79:
        x=ord(i)-64
        y= int((x-0.5)/3)
        print(f"{i} = {y}")
        
# input : ABCDEFGHIJKLMNO
# output : 
# A = 0
# B = 0
# C = 0
# D = 1
# E = 1
# F = 1
# G = 2
# H = 2
# I = 2
# J = 3
# K = 3
# L = 3
# M = 4
# N = 4
# O = 4

이 코드는 최종 프로그램의 로직중 일부이다.

갯또 원하는 값을 찾을 수 있다.

 

미적분이나 수학 자체는 컴퓨터 공학에 필수 요소라고 생각이 된다.

 


함수 그리는 사이트

https://www.desmos.com/calculator?lang=ko

 

Desmos | 그래핑 계산기

 

www.desmos.com

백준 문제

https://www.acmicpc.net/problem/5622

 

5622번: 다이얼

첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.

www.acmicpc.net

 

반응형

'컴퓨터 공학' 카테고리의 다른 글

3차 함수와 알고리즘  (1) 2023.01.11
부동소수점  (0) 2023.01.06
Posted by 53C
,

부동소수점

컴퓨터 공학 2023. 1. 6. 01:02
반응형

부동소수점의 구조와 원리

서론

어릴때 좋은 수학 선생님을 많이 만났고 수학을 배우면서 가장 먼저 배운거는 수의 체계였습니다. (외우느라 ㅈㄴ 맞음)

 

컴퓨터는 실수를 표현하는 체계를 가지고 있습니다.

Python 기준으로 실수는 보통 정수가 아닌 유리수를 표현할때 많이 사용을 했습니다..

python의 경우는 자동으로 형변환을 해주기 때문에 문제가 없기도 하죠

 

본론

고정소수점이란?

실수를 표현할때 소수점의 위치를 고정하는 것을 말한다.

 

예를 들면

a라는 자료형은 9bit 자료형이다.

여기서

부호부는 0은 양수 1은 음수를 나타내고

4bit는 총 16개의 숫자를 나타낼수 있다.

그러면 0b000010001 = 2.2가 되는것이다.

 

부동소수점이란?

실수를 표현할때 소수점의 위치를 고정하지 않는것을 말한다.

 

부동 소수점이 어려워 보이지만 예를 들어

12.345 는 0.12345 * 10^2 이되는 부동 소수점 방식으로 표현이 가능하다.

 

이를 2진수에 적용을 해보자!

 

부동소수점 만드는법

1. 부호, 정수, 소수 부로 나눈다.

2. 각 부분을 2진수로 변환한다.

3. 정수부와 소수부를 합친다.

4. 가장 앞 bit가 1이 될때 까지 소수점을 이동해준다.

5. 이동한 만큼이 지수부가 된다.

6. 부동소수점 표현 방식(IEEE754) 으로 변환해 준다.

 

풀어서 설명을 하면

상세 설명

예) -9.6875

1. 부호, 정수, 소수 부로 나눈다.

부호 정수 소수
- 9 0.6875

2. 각 부분을 2진수로 변환한다.

정수부는 일반적인 방법으로 2진수를 도출하면된다.

0b1001

 

소수부는 2진수를 만드는 방법의 역순이다.

값에 2를 곱한후 1이 넘어갈 경우 1을 빼주고는 과정을 반복한다.

각단계에서 빠지는 정수값으로 2진수 값을 도출할수 있다.

해당 식을 알고리즘으로 나타내면

ix = 6875
ex = ix
qx = 10000
b_list = []

while True:
    ix *= 2
    if ix >= qx:
        ix -= qx
        b_list.append(1)
        print(f"{ix} - - - 1")
    else:
        b_list.append(0)
        print(f"{ix} - - - 0")

    if ix == 0 or ix == qx or ex == ix :
         break

print(b_list)
3750 - - - 1
7500 - - - 0
5000 - - - 1
0 - - - 1
[1, 0, 1, 1]

해당 값으로 도출이 가능하다.

0b1011

 

3. 각부분을 합친다.

0b1001.1011 이된다.

 

4.가장 앞 bit가 1이 될때 까지 소수점을 이동해준다.

0b1.0011011 * 2^3

(10진수는 소수점 1개가 이동할때 10^n 이기 때문에 2진수에서는 2^n을 해준다.)

 

5. 이동한 만큼이 지수부가 된다.

이후 정수부는 제거를 하고 소수부만 남기게 되는데 이를 가수부라고 칭한다.

2의 지수를 지수부라고 칭하면

가수부 진수부
0b0011011 3 =0b11

6. 부동소수점 표현 방식(IEEE754) 으로 변환해 준다.

sign[1bit] Exponent[8bit] Mantissa[23bit]
- 0b11 0b0011011
1 00000011 00110110000000000000000

= 10000001100110110000000000000000

라는 결과 값을 도출할수 있다.

반응형

'컴퓨터 공학' 카테고리의 다른 글

3차 함수와 알고리즘  (1) 2023.01.11
1차 함수와 가우스 기호 알고리즘 응용  (0) 2023.01.11
Posted by 53C
,
반응형
def solution(participant, completion):
    s1 = set(participant)
    s2 = set(completion)
    answer = s1.difference(s2)
    return answer

음... 파이썬의 집합 자료형을 사용하려해도 되지 않는다.

 

그래서 기본적인 배열을 이용하기로 했다.

 

def solution(participant, completion):
    for join in completion:
        participant.remove(join)
        continue
    answer = participant.pop()
    return answer

다음은 효율성 테스트를 통과해야한다.

 

반응형
Posted by 53C
,
반응형

www.pythonchallenge.com/pc/def/linkedlist.php

 

follow the chain

 

www.pythonchallenge.com

페이지 소스내의 링크로 접속

url의 일부분을 변경해가며 답을 찾아내는 문제인것 같다.

import urllib.request
import re

html='http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing='
response = requests.get(html+'0000')
i=0
while i<400:
    i+=1
    nem = response.text
    data=re.findall("[0-9]+",nem)
    # datastr=data[0]
    print(response.text,data)
    response = requests.get(html+data[0])

#peak.html

-정규 표현식을 이용하여 숫자를 추출하여 문제를 풀이함

반응형

'Python > The Python Challenge' 카테고리의 다른 글

The Python Challenge 3  (0) 2020.12.26
The Python Challenge 2  (0) 2019.06.02
The Python Challenge 1  (0) 2019.06.02
The Python Challenge 0  (0) 2019.06.02
Posted by 53C
,