728x90
반응형

스프링 부트 spring boot 

자바 웹 프로그램 더욱 쉽고 빠르게 만들기 위한 도구

 

 

Spring Framework 를 개선한것

- 개발 환경 설정 간소화, 웹 애플리케이션 서버 내장(WAS : tomcat)

웹 서비스를 jar 파일로 간편하기 배포 가능

 

 

 

Spring boot  프로젝트 만들기

 

https://start.spring.io

 

Artifact : 프로젝트의 이름 설정하는 부분

 

Package Name : Group + Artifact

 

Dependencies : 스프링 부트 프로젝트에 필요한 여러 도구를 가져오는 역할

 

Spring Web : 웹 빌드

H2 Database : 자료를 저장하기 위한 데이터베이스

Mustache : 화면을 만들기 위해 필요한 도구

Spring Data JPA : 데이터 베이스 좀더 편리하게 다룰 수 있게 해줌

 

Generate 후 압출  풀기

 

intelij 에서 열기

 

 

프로젝트 구조

 

src 내부

- main 

java 자바 코드 저장

resources : 외부 파일저장

 

자바 프로그램 main  메서드는 com.example.firstproject에 하나의 클래스로 존재함

기본 패키지의 FirstprojectApplication 안에 메인 메서드가 있음

Started FirstprojectApplication in 8.042 seconds (process running for 8.956) 이 표시가 서버 실행이 완료 되었다는 뜻

 

- 스프링 부트 버전 바꾸기 : build.gradle 에서 org.springframework.boot version ~~~ 을 변경 후 코끼리  아이콘 클릭

 

 

프로젝트 파일을 실행하자마자 서버를 실행해 봤자 에러 페이지가 뜬다.

- 아직 웹 페이지를 만들지 않았기 때문

- html을 이용해서 보여줄 수 있게 제작해야함

- hello.html 을 만들어서 그 안 body에 hello  world를 써넣자

src > main > resources > static > hello.html

 

웹 서비스 동작 원리 이해

 

클라이언트 - 서버 구조

웹 서비스는 클라이언트 요청 따른 서버 응답으로 동작

클라이언트 : 서비스 사용하는 프로그램 또는 컴퓨터

서버 : 서비스를 제공하는 프로그램  또는 컴퓨터

 

웹 브라우저 : 클라이언트, 스프링부트 : 서버

당연히 스프링 부트가 서버 실행을 중단하면 웹에서 접근이 불가능하다.

TomcatWebServer Tomcat initialized with port 8080 (http)

톰캣이 8080이라는 포트에서 수행되었따.

 

localhost:8080/hello.html의 의미

localhost : 실행 중인 서버의 주소 중 특별한 주소인 '내 컴퓨터' = IP 주소로 변경하면 127.0.0.1이 된다.

8080 : 포트 번호 (방번호)

톰캣 : 웹 서버 - 스프링 부트는 톰캣에 담겨서 실행 된다.

hello.html : 웹 브라우저가 요청한 hello.html이라는 파일을 스프링 부트가 보여주는 것 =  서버에 요청하는 파일

 

즉 전체 문장의 의미는 

내 컴퓨터의 8080번 방에서 수행되고 있는 톰캣 서버에 hello.html이라는 파일을 요청하는 것

이런식으로 파일을 직접 지정해서 요청하는 경우 

src > main > resources > static 에서 파일을 찾는다.

 

웹 브라우저 개발자 모드 화면과 스프링 부트에 html 파일에 있는 코드는 일치한다.

 

 

 

반응형
728x90
반응형

컴퓨터 그래픽스 : 컴퓨터 속 눈에 보이는 이미지를 창조, 조작 ,사용하는 학문

 

이미지는 2D distribution of intensity or color

I : R^2

 

색 : R, G, B 만 섞어도 인간이 구분 가능한 색 모두 나타낼 수 있음

 

이미지는 픽셀로 표현한다.

숫자의 2D 배열을 통해서 (pixel) 이미지 표현

임의의 이미지를 표현하는데 유리,작은 사각형을 모아 이미지 표현

메모리가 싸지면서 가능해짐

 

 

 

raster images 의 데이터타입

비트맵 bitmaps : boolean per pixel ( 1bpp) : 1, 0으로 이루어짐, 흰색, 검정으로만 표시

Grayscale : integer per pixel

픽셀당 빛의 양(intensity)를 나타낸다.

8bit이 일반적, 2^8 이면 256가지 빛의 강도를 나타낼 수 있다. 단색 기준

10, 12, 16bit 을 쓸 때도 있다.

 

Color : 3 integers per pixel

RGB 각각에 대해서 8bpp씩, 총 24bits 24bpp 사용한다.

용량에 맞춰서 16, 30, 36, 48 bpp 쓰는 경우도 있다.

gif format의 경우 8bpp 고정, 정해져있는 색상 256가지로 이미지 표현한다.

 

요즘은 메모리가 저렴해서 픽셀당 비트 더 쓸  수 있음

한 채널당 4byte를 쓰면?  훨씬 더 사실적으로 표현 가능, 이미지  변형에 대한 손실도 줄어듦

HDR : High Dynamic Range 32-bit float (RGBA) has 32-bits per color channel, 128-bits per pixel

 

24bpp img : 8bpp per color, 채널별 256 단계

 

alpha channel :각 화소에 대한 색상표현, 데이터로 부터  분리한보조데이터 ,  투명도, 매트데이터 등등

사진 배경날릴 때 사용

 

 

이미지를 위해 필요한 용량

1024 * 1024 image = 2^20 = 1 mega pixel : pixel 개수가 가로세로 1024개씩 있는 이미지파일

용량을 계산하려면, 전체 픽셀수와 픽셀당 비트수를 곱한다.

8bit = 1byte

2^10 byte = 1kb

2^20 byte = 1mb

2^30 byte = 1gb

...

bitmap img = 1bpp : 128KB // 1024 * 1024 * 1bit = 2^20 bit = 2^17 byte = 2^7 KB

grayscale img = 8bpp : 1byte per pixel : 1MB

color 24bpp : 3byte per pixel : 3MB

floating point HDR color : 4byte* 3 per pixel = 12byte per pixel, 12MB

 

이미지 프로세싱

 

컬러->회색

24bit 짜리를 8bit으로 바꾼다. 한가지 색 채널만 사용하면 이상해진다. 

예를 들어 컬러이미지에서 파란색의 픽셀정보만 가져와서 흑백사진으로 바꾸면.. 

파란색이 없는 색상(노랑) 은 검은색으로 표현되는 등의 문제가 생긴다. - 맘에 안드는 상황

 

현실과 비슷한 회색 사진을 만들고 싶다면..

컬러이미지의 각 채널정보의 조합을 이용한다.

R에서 얼마, G에서 얼마, B에서 얼마 이런식으로

 

bpp 줄이기

8bpp이미지를 1bpp로 바꾸면

256종류 색을 쓰던 이미지에서 2가지 색을 쓰는 이미지로 바뀐다.

정보 손실은 당연한 것

quantize 필요, 일관된 규칙도 필요하다.

만약 pixel intensity가 0.5 이상이면 1, 아니면 0으로 변환하는 등

 

디더링을 이용해서 이미지 부드럽게

 

 

pixel value : 얼마나 픽셀이 밝은가를 나타냄

큰 값이면 더 밝다.

value 200 이 value 100 pixel 보다 2배 밝을까? 아님

얼마나 밝은거지?

 

pixel 배치에 따라서 value 낮은데도 더 밝게 보이는 영역도 생김

 

light intensity와 pixel value 가 선형관계가 아님

 

transfer function 필요 : input pixel value를 디스플레이에 올려진 이미지의 밝은 정도로 매핑해주는 함수

 

하지만 장치, 매체에 따라 제약이 심하다.

 

Maximum displayable intensity : I_max

픽셀에 전력이 얼마나 전달될 수 있나

Minimum displayable intensity : I_min

꺼진 상태에서 빛 나는 정도에 따라

 

viewing flare, k : light reflected by the display

실전에서 이미지 대비 결정하는데 정말 중요한 요소이다

contrast : 물체를 다른물체, 배경과 구분할 수 있게

 

I_max 의 5% 평범한 사무 공간
CRT나 LCD 화면을 아주 검게 만드려는 노력

영화관에서 주변환경을 다 검게 만드는 노력

 

k=0 이면, 암실이라는 뜻,

 

Dynamic Range: 디스플레이의 품질을 측정하는 방법

Rd = Imax/Imin : 암실에서 측정했을 때, (k=0, 성능이 좋아보일것)

Rd = Imax+k / Imin+k 

디스플레이에서 얻을 수 있는 image contrast의 정도를 결정한다.

좋은 디스플레이 or 좋은 환경(어두운) = 100000 : 1 매우 크다.

안좋은 디스플레이 or 주변 밝은 환경 = 20 : 1 작다.

 

 

transfer function shpae

얼마나 바뀌어야 우리가 알아차릴 수 있나?  intensity가 2% 바뀌면 알아차릴수 있음

밝은 곳 보단 어두운 곳에서 작은 양자화 과정

 

ideal quantization

1.02 증가, 100:1 dynamic rage가 240과정이다.

10:1 위해서는 120과정

 

일반적으로 8bits를 많이 쓴다.(채널당)

 

linear quantization : i(n) = (n/N) Imax

간단, 편리하지만 메모리 낭비

 

power-law quantization : I(n) = (n/N)^r Imax

꽤 간단, 편리

linearize가 계산 전에 필요하다.

감마 값에 대한 동의가 필요하다. 일반적으로 2.2를 쓴다.

 

꽤 간편하면서도 잘 들어맞는 식이 된다.

 

n = pixel value

N = 2^n -1 

n = Na^(1/r) intensity를 계산

 

감마값이 낮으면 직선과 비슷 너무 밝아 보일수 있음, 높여야해

감마값이 높으면 너무 가팔라짐, 어두운 부분 너무 어두워, 낮춰야 해

 

 

반응형
728x90
반응형

좋은 구간 

 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 128 MB 17405 4824 4121 28.634%

문제

정수 집합 S가 주어졌을때, 다음 조건을 만족하는 구간 [A, B]를 좋은 구간이라고 한다.

  • A와 B는 양의 정수이고, A < B를 만족한다.
  • A ≤ x ≤ B를 만족하는 모든 정수 x가 집합 S에 속하지 않는다.

집합 S와 n이 주어졌을 때, n을 포함하는 좋은 구간의 개수를 구해보자.

 

입력

첫째 줄에 집합 S의 크기 L이 주어진다. 둘째 줄에는 집합에 포함된 정수가 주어진다. 셋째 줄에는 n이 주어진다.

출력

첫째 줄에 n을 포함하는 좋은 구간의 개수를 출력한다.

제한

  • 1 ≤ L ≤ 50
  • 집합 S에는 중복되는 정수가 없다.
  • 집합 S에 포함된 모든 정수는 1보다 크거나 같고, 1,000보다 작거나 같다.
  • 1 ≤ n ≤ (집합 S에서 가장 큰 정수)

####

양의 정수 조건때문에 다른 분이 작성하신 부분 참고

num.append(0)

위와 같이 하지 않으면 

n이 집합 s 중 가장 작은 값보다 더 작을 때 답이 구해지지 않음,

양의 정수 조건이 있으므로 0보단 크게

 

 

정렬된 배열 

1 4 7 10 19 가 있을 때

n이 14라면

좋은 구간은

11 ~ 18 의 수 중 두 숫자를 고른 쌍을

구간으로 하는 것 중에

14를 범위안에 가지고 있는 구간을 뜻한다

 

11 ~ 18 범위 내에서 좋은 구간이 가능한 경우는 3가지다.

12, 14 처럼 'n보다 작은수' 와 'n' 을 구간으로 하는 경우

14, 17 처럼 'n'과 'n보다 큰수'를 구간으로 하는 경우

12, 17 처럼 'n'이 구간 안에 있는 경우

 

위 3가지 식을 한번에 식으로 나타내면 

(n-a)* (b-n) -1 이다.

 

 

만약 n이 집합s에 이미 있는 경우-

애초에 조건에 의해 n을 포함하는 좋은 구간이 생길 수 없으므로 0이다.


l = int(input())
num = list(map(int, input().split()))
n = int(input())
a,b = 0,0
num.append(0)
num = sorted(num)
#print(num)
for i in range(len(num)-1):
    if num[i] < n and num[i+1] > n:
        a= num[i]
        b= num[i+1]
        print((n-a)*(b-n)-1)
        break
    elif num[i] == n or num[i+1]==n:
        print(0)
        break
   



 

반응형

'백준 실버' 카테고리의 다른 글

백준 1049 기타줄  (0) 2024.03.04
백준 1032  (0) 2021.11.19
백준 1003번  (0) 2021.11.19
728x90
반응형

기타줄

 

 

시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 128 MB 29779 12045 10396 40.470%

문제

Day Of Mourning의 기타리스트 강토가 사용하는 기타에서 N개의 줄이 끊어졌다. 따라서 새로운 줄을 사거나 교체해야 한다. 강토는 되도록이면 돈을 적게 쓰려고 한다. 6줄 패키지를 살 수도 있고, 1개 또는 그 이상의 줄을 낱개로 살 수도 있다.

끊어진 기타줄의 개수 N과 기타줄 브랜드 M개가 주어지고, 각각의 브랜드에서 파는 기타줄 6개가 들어있는 패키지의 가격, 낱개로 살 때의 가격이 주어질 때, 적어도 N개를 사기 위해 필요한 돈의 수를 최소로 하는 프로그램을 작성하시오.

입력

첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주어진다. 가격은 0보다 크거나 같고, 1,000보다 작거나 같은 정수이다.

출력

첫째 줄에 기타줄을 적어도 N개 사기 위해 필요한 돈의 최솟값을 출력한다.

 

 

브랜드에 대한 선호도 같은게 없으니까

패키지와 낱개 각각의 최솟값만 보고 비교한다.

 

package 리스트의 최솟값을 package

one 리스트의 최솟값을 one 으로 놓고

 

구매할 수 있는 경우의 수가 3가지 있다.

1. 개수를 딱 맞춰서 사는 경우

1-1 : 패키지 가격이 낱개로 사는거보다 싼 경우

1-2 : 패키지 가격이 낱개로 사는거보다 비싼 경우

2. 개수를 딱 맞추지 않고 사는 경우 -> 패키지 값이 싸서 딱맞추는거보다 더 사더라도 패키지로 사는게 이득인 경우

 

'''
첫 째 줄에 n,m 주어짐
n 100 이하 자연수
m 50 이하 자연수

m개 줄에 각 브랜드의 패키지 가격과 낱개 가격 공백으로 구분하여 주어짐
가격 0~ 1000 정수

각각의 브랜드
패키지 / 낱개
가격 주어짐
적어도 n개 사기 위해 필요한 돈의 수를 최소로 하는

결국엔 패키지가 더 쌀 수도 있고, 낱개로 사는게 더 쌀 수도 있음
어쨋든
평균 단가 가장 싼 패키지를 최대한 많이 사고
나머지는 가장 싼 낱개로 살 수 있는게

'''

n,m = map(int, input().split())

package = []
one = []

for _ in range(m):
    a,b = input().split()
    package.append(int(a))
    one.append(int(b))


package = min(package)
one = min(one)


if package < one*6: #패키지가 낱개구매보다 싸면
    if package < (n%6) * one: #패키지로 '더 사는게 ' 낱개로 딱 맞춰서 사는거 보다 싸다면
        print(((n//6)+1) * package)
    else: #패키지로 살만큼 사고, 나머지 낱개로
        print((n//6)*package + one * (n%6))
else: #패키지가 낱개구매보다 비싸면
    print(n*one)




 

 

 

반응형

'백준 실버' 카테고리의 다른 글

백준 좋은구간 1059  (0) 2024.03.04
백준 1032  (0) 2021.11.19
백준 1003번  (0) 2021.11.19

+ Recent posts