'참고 링크 > 개발' 카테고리의 다른 글
플러터 개발 (0) | 2020.03.18 |
---|---|
[안드로이드] OpenGL 참고용 (0) | 2020.03.13 |
이펙티브 자바 (0) | 2020.03.09 |
리팩토링 관련 사이트 (0) | 2020.03.01 |
코딩 테스트를 위한 Dev C++설치 (0) | 2020.01.02 |
플러터 개발 (0) | 2020.03.18 |
---|---|
[안드로이드] OpenGL 참고용 (0) | 2020.03.13 |
이펙티브 자바 (0) | 2020.03.09 |
리팩토링 관련 사이트 (0) | 2020.03.01 |
코딩 테스트를 위한 Dev C++설치 (0) | 2020.01.02 |
알고리즘 테스트에 대한 공부의 필요성을 느낌.
프로그래밍 대회에서 배우는 알고리즘 문제해결 전략이라는 책으로 시작.
구종만씨가 지음.
개발자의 실력에 따른 생산성의 차이가 크다.
그 이유는 교육과정이 프로그래밍 기술과 지식만 가르치고, 응용할 수 있는 능력을 기르지 못하고 있다.
알고리즘이 생겨난 배경과 설계 시 필요한 통찰을 얻어야한다.
알고리즘의 원칙을 이해하고 변형할 수 있어야 프로그래밍 문제를 풀 수 있다.
이 책은 프로그래밍 대회 문제를 풀며 알고리즘 설계 기법과 자료구조를 직관적으로 이해하고, 알고리즘 문제 해결 능력을 키울 수 있도록 구성되어 있다.
문제를 풀어가면서 개념과 구조를 경험적으로 이해하는 것이 이 책의 목표이다.
요약: 문제를 풀어 알고리즘의 개념을 이해하고 변형할 수 있는 능력을 기르자.
프로그래머는 다양하다. 분야간 차이를 뛰어넘는 좋은 개발자의 기준이 있을까?
프로그래밍은 문제해결이다.
프로그래밍을 할 때 여러가지 지식이 사용된다.
언어의 특성
작동 환경에 대한 특성(프로그램이 동작할 하드웨어와 운영체제에 관한 지식)
라이브러리 관련 지식(사용하고 있는 라이브러리들에 대한 유의사항)
가용 메모리
동작 시간 제한
재사용성이 좋은 코드 작성법
많은 제약 조건과 요구사항을 이해하고 최선의 방법을 찾아내는 능력은 좋은 프로그래머가 되기 위해 필수적이다.
이 책에서는 이런 능력을 문제해결 능력이라고 한다.
사용 언어나 라이브러리, 알고리즘에 대한 지식을 이용해 시스템을 만들어 내는 것이 문제해결능력이다.
프로그래밍 대회에 참가하는 것은 문제 해결 기술을 연마하기에 좋은 방법이다.
프로그래밍 대회에서 배울 수 있는 것들
7부로 이루어져있다.
1~2부는 기초 지식.
나머지 부분은 알고리즘 설계 기법과 자료구조등 문제 해결에 필요한 기술을 소개한다.
책의 문제는 알고 스팟에서 실제 대회와 비슷한 환경에서 채점 가능.
컴퓨터 공학과 학부생을 타겟.
C++과 STL사용
무작정 풀면 안된다.
문제 해결 연구의 고전 '어떻게 풀 것인가'에서의 네 단계 문제해결 과정
프로그래밍 대회를 위한 여섯단계 문제 해결 알고리즘
1단계: 문제를 읽고 이해하기
문제의 요구사항과 제약조건을 정확히 파악해야한다.
2단계: 재정의와 추상화
자신이 다루기 쉬운 개념으로, 문제를 자신의 언어로 풀어 쓰는 것.
문제의 요구를 직관적으로 이해하기 위해 필요하다.
3단계: 계획 세우기
문제를 어떻게 해결할지 결정하고, 사용할 알고리즘과 자료구조를 선택한다.
4단계: 계획 검증하기
바로 구현하는 것이 아니라, 계획 검증이 필요하다.
설계한 알고리즘이 요구조건을 만족시키는지 확인해야한다.
5단계: 계획 수행하기
프로그램을 작성한다.
6단계: 회고하기
장기적인 성장에 영향을 미치는 단계다.
문제를 해결한 과정을 돌아보고 개선하는 과정이다.
문제 해결의 더 좋은 방법을 발견하는 기회이다.
문제를 풀 때마다 코드와 경험을 기록으로 남겨라.
어떻게 접근했는지, 어떻게 풀었는지, 어떤 깨달음이 문제 푸는데 도움을 주었는지 기록하자.
풀지 못한 경우 오답 원인도 작성하자.
오답 기록을 작성하면서 틀리는 부분과 원인을 파악할 수 있다.
그리고 다른 사람의 풀이도 참고, 분석하라.
문제를 풀지 못할 때
초보 수준의 경우 한 문제에 너무 매달려 있지 말라.
단, 다른 사람의 풀이를 참조하는 경우 반드시 복기를 동반해야 한다.
왜 내가 풀지 못 했는가를 살펴봐야한다.
직관과 체계적인 접근
문제와 답의 구조에 대한 직관의 중요성.
직관은 문제 해결의 알고리즘이 어떤 형태를 가질지 예측할 수 있게 한다.
막막한 문제를 해결하며 경험을 쌓아가야 한다.
막막한 문제는 어떻게 해결해야할 것인가.
체계적으로 백지에서 시작해 해결을 위한 기반을 차근차근 쌓아 올리면서 전진하는 것.
비슷한 문제를 풀어본 적이 있던가?
이전 경험을 활용해 문제를 풀 수 있다.
그러기 위해서 원리를 이해하고 변형할 수 있어야 한다.
문제에 맞는 알고리즘을 적용하기 위해서는 알고리즘의 동작 과정과 원리를 완전히 이해해야 한다.
단순한 방법에서 시작할 수 있을까?
가장 단순히 문제를 해결할 수 잇는 방법을 만들어 본다.
이 방법을 개선하고 참고해서 문제를 풀 수 있다.
위 알고리즘으로 문제를 풀 수 없다 하더라도, 효율성을 파악하는 기준선이 될 수 있다.
예) 완전 탐색->너비우선 탐색->요소 중복 제거 -> 순서 중복 제거 를 통해 경우의 수를 구하는 알고리즘이 개선 될 수 있다.
문제 푸는 과정을 수식화할 수 있을 까?
새로운 방향에서 접근해야 풀리는 문제도 만나게 된다.
손으로 간단한 입력을 직접 해결해 보며 방법을 찾을 수 있음.
문제를 단순화할 수 없을까?
제약조건을 없애거나, 계산해야할 변수를 줄이거나, 차원 수를 낮추거나 하는 방법으로 접근할 수 있음.
그림으로 그려볼 수 있을까?
문제에 관련된 그림을 그려 직관적으로 받아들일 수 있다.
수식으로 표현할 수 있을까?
수식으로 표현하는 하는 것이 도움이 되는 경우도 있음.
문제를 분해할 수 있을까?
더 다루기 쉬운 형태로 문제를 변형.
뒤에서부터 생각해 문제를 풀 수 있을까?
거꾸로 하면 해결이 쉬운 경우가 있음.
순서를 강제할 수 있을까?
순서를 특정지어 중복이 사라진다면 강제할 수 있다.
특정 형태의 답만을 고려할 수 있을까?
순서 강제 기법의 연장선으로 정규화 기법이 있습니다.
정규화란 우리가 고려해야 할 답들 중 형태가 다르지만 결과적으로는 똑같은 것을 그룹으로 묶은 뒤, 각 그룹의 대표들만 고려하는 방법이다.
어떻게 문제를 풀 것인가 (How to solve it)은 문제해결의 고전으로 문제 해결에 있어 다양한 전략들을 나열합니다.
시간나면 읽기.
읽기 쉬운 코드를 작성하라.
가독성이 좋아야 디버깅도 쉽고, 정확하게 작성할 수 있다.
자신의 코드 스타일을 간결하고 일관되게 다듬으려 노력하라.
간결하고 효율적인 프로그램을 작성하는 능력이 중요
간결한 코드를 작성하기
코드가 짧을 수록 오타나 버그가 생길 가능성이 줄고, 디버깅도 쉬워진다.
일반적인 프로그래밍과 다르게 테스트에서는 전역변수를 사용하는 경우가 많다.
C/C++ 매크로를 사용해 간결한 코드를 작성하기도 한다.
적극적으로 코드 재사용하기
간결한 코드를 위한 직접적인 방법은 코드를 모듈화 하는 것이다.
반복되는 코드를 함수나 클래스로 분리해 재사용.
이상적인 세계에서는 한 함수가 두 가지 이상의 일을 해서는 안된다고 한다.
입력을 읽어들이는 함수, 입력을 처리하기 쉬운 형태로 바꾸는 함수, 실제 문제를 푸는 함수가 분리되어야 한다는 말이다.
그러나 프로그래밍 대회에서는 엄격히 원칙을 따르지 못한다.
표준 라이브러리 공부하기
기초적인 자료구조를 직접 작성하는 것은 시간낭비이다.
문자열, 동적배열, 스택, 큐, 리스트, 딕셔너리 등의 자료구조와 정렬 등의 표준 라이브러리 사용법을 익히자.
항상 같은 형태로 프로그램을 작성하기
검증된 코드는 같은 형식대로 작성한다.
도구가 아닌 문제에 집중.
일관되고 명료한 명명법 사용하기
네이밍 컨벤션.
함수 이름도 기능을 의미하도록 작성.
모든 자료를 정규화해서 저장하기
같은 자료를 다른 형태로 저장하지 말아야한다.
자료를 표현하는 클래스 생성자나 데이터를 입력받자마자 정규화를 수행하라.
산술 오버플로우
변수의 표현 범위를 넘어서는 경우
버퍼 오버플로우
배열 범위 밖 원소에 접근하는 오류
일관되지 않은 범위 표현 방식 사용하기
대부분의 프로그래밍 언어는 반열린 구간을 사용한다.
첫번째 값은 집합에 포함하고, 다른하나는 포함하지 않는다.
Off-by-one 오류
계산의 큰 줄기는 맞지만 하나가 모자라거나 하나가 많아서 틀리는 코드의 오류를 말한다.
오류를 방지하는 방법은 최소 입력이 주어졌을 때 이 코드가 어떻게 동작할 지를 되새겨 보는 것이다.
컴파일러가 잡아주지 못하는 상수 오타
값 자체를 잘못 써서 생기는 문제.
스택 오버플로우
재귀 호출의 깊이가 너무 깊어지는 경우 생긴다.
지역변수로 선언한 배열이나 클래스 인스턴스가 너무 큰경우 발생할 수도 있다.
때문에 자동으로 힙에 메모리를 할당하는 STL컨테이너를 쓰거나 전역변수를 사용한다.
다차열 배열 인덱스 순서 바꿔 쓰기
평소에는 잘 사용하지 않는 다차원 배열을 사용하면서 순서를 헷갈리는 경우가 있음.
가능한 배열에 접근하는 위치를 통일하는 것이 좋음.
디버깅에 관하여
대회에서는 디버거보다 직접 검증하는 것이 더 빠르다.
-작은 입력에 대해 잘 작동되는지 확인하기
-assertion을 쓴다. 주어진 조건이 거짓인 경우 오류를 내고 프로그램이 종료된다.
-프로그램의 계산 중간 결과를 출력한다.
테스트에 관하여
가장 작은 입력, 가장 큰 입력, 예제 입력의 변형 등을 통해 테스트 해보는 것이 좋다.
스캐폴딩 기법.
코드를 개발할 때 뼈대를 잡기 위해 임시로 사용하는 코드.
03 알고리즘 설계 패러다임 - (8)동적 계획법 (0) | 2020.01.02 |
---|---|
03 알고리즘 설계 패러다임 - (7)분할 정복 (0) | 2020.01.02 |
03 알고리즘 설계 패러다임 - (6)무식하게 풀기 (0) | 2019.12.30 |
02 알고리즘 분석 (0) | 2019.12.29 |
해외에 나가지 않고 영어를 가르칠 수 없어!
너는 영어를 가르칠 수 없어 해외에 나가지 않고.
너는 가르칠 수 없어 영어를 해외 나가는 것 없이.
You can not teach english without going abroad.
how many + 셀수 있는
how much + 셀수 없는
나는 운전해
I drive
나는 운전해야해
I shall drive
나는 운전할 거야
I will drive
나는 운전할 수 있어
I can drive
나는 운전할지도 몰라
I may drive
버스에 타라
Get on the bus.
버스에서 내려
Get off the bus.
그 옷을 입어라.
Put the clothes on.
그 옷을 벗어라.
Put the clothes off.
그 미팅 연기해.
Put the meeting off.
이것들은 10% 할인입니다.
These are 10% off.
잔디에서 떨어져 있으세요.
Keep off the grass.
그 비행기는 오전 10시에 이륙해요.
The airplane takes off at 10 am.
자랑하지마
Don't show off.
난 휴가중이야.
I'm on a vacation.
난 통화중이야.
I'm on a phone.
나는 동물에 대한 책을 가졌어.
I have books about animals.
그에 대해 생각해
Think about him.
그를 생각해
Think of him.
~하려고 하다
be about to
나는 가려는 중이야.
I am about to go.
~하려고 했다
was/were about to
가려던 중이였어?
were you about to go?
너 전화하려던 참이엿?
were you about to call?
어떻게 너는 그를 알아?
How do you know of him?
너는 그에 대해 알아?
Do you know about him?
stir
휘젓다.
답답해도 번역하지 말라.
영어 자체를 느낌으로 이해하라.
영어로 어떻게 말할지 생각하라.
영어를 소리내어 읽어라.
감으로 연습.
Dream no small dreams
(for they have no power to stir the souls of men.)
작은 꿈을 꾸지 말라. 작은 꿈은 사람의 소울을 움직일 힘이 없다.
If we don't change, we don't grow.
If we don't grow, we aren't really living.
우리가 변하지 않으면, 우리는 성장하지 않는다.
우리가 성장하지 않으면, 우리는 살아있는게 아니다.
If you can dream it, you can do it.
당신이 그것을 꿈꿀 수 있다면, 당신은 그것을 할 수 있다.
[100단어 영어회화의 기적] 복습 (0) | 2019.12.30 |
---|---|
Shall (0) | 2019.12.29 |
[100단어 영어회화의 기적] DAY 7 - 나만의 정리 (0) | 2019.12.24 |
[100단어 영어회화의 기적] DAY 6 - 나만의 정리 (0) | 2019.12.20 |
[100단어 영어회화의 기적] DAY 5 - 나만의 정리 (0) | 2019.12.18 |
<html>
</html>
Document Type Definition
출력할 웹 페이지의 형식을 브라우저에게 전달한다.
문서의 최상위에 위치해야하며 대소문자를 구별하지 않는다.
HTML5
<!DOCTYPE html>
웹페이지에 단 하나만 존재.
모든 요소는 html요소의 하위 요소이다.
html요소 역시 클로벌 어트리뷰트를 지원한다.
<html>
</html>
head 요소는 메타데이터를 포함하기 위한 요소이다.
웹페이지에 단 하나만 존재.
메타데이터는 title, style, link, script에 대한 정보를 가진 데이터로 화면에 출력되지 않는다.
문서의 제목을 정의. 정의된 제목은 브라우저의 탭에 출력된다.
<!DOCTYPE html>
<html>
<head>
<title>브라우저 탭에 표시되는 제목</title>
</head>
</html>
HTML문서에서 사용되는 스타일을 정의하는 정보를 정의.
<!DOCTYPE html>
<html>
<head>
<title>브라우저 탭에 표시되는 제목</title>
<style>
body {
background-color: black;
color: white;
}
</style>
</head>
<body>
</body>
</html>
link 요소는 외부 문서를 연결화는 태그.
주로 css같은 파일을 연결. 폰트 주소를 연결할 수도 있다.
<!DOCTYPE html>
<html>
<head>
<title>브라우저 탭에 표시되는 제목</title>
<link rel='stylesheet' type='text/css' href='sample.css'>
</head>
<body>
</body>
</html>
자바스크립트 코드를 작성하는 공간이다.
src 어트리뷰트로 외부 자바스크립트 파일을 불러올 수 있다.
메타 데이터 정의시 사용. 메타데이터는 브라우저, 검색엔진 등에 의해 사용된다.
charset으로 문자셋을 정의할 수 있다.
검색엔진이 사용할 키워드를 정의할 수 있다.
웹페이지의 설명을 정의할 수 있다.
웹페이지의 설명을 정의할 수 있다.
저자를 정의할 수 있다.
페이지 리프레시 주기를 정의할 수 있다.
문서의 내용을 담는 곳 이다.
문서에 하나만 존재한다.
[HTML] 3. 시맨틱 웹 (0) | 2019.12.19 |
---|---|
[HTML] 2. HTML5 기본 문법 (0) | 2019.12.18 |
[HTML] 1. 프런트엔드 개발자 학습 방향 (0) | 2019.12.17 |
S가 V하고 있어?
Is S Ving?
Is the teacher coming?
What Are your friends doing?
What is Jane doing?
Is Kim practicing?
Who is singing?
What are you doing?
Isn't the teacher seeing?
Don't limit your challenges, challenge your limits.
너의 도전에 한계를 두지 말라, 한계에 도전하라.
Don't grow old, grow up.
늙지말고, 성장하라.
[100단어 영어회화의 기적] 복습 (0) | 2019.12.30 |
---|---|
Shall (0) | 2019.12.29 |
[100단어 영어회화의 기적] DAY 8 - 나만의 정리 (0) | 2019.12.26 |
[100단어 영어회화의 기적] DAY 6 - 나만의 정리 (0) | 2019.12.20 |
[100단어 영어회화의 기적] DAY 5 - 나만의 정리 (0) | 2019.12.18 |
3D 및 2D 비디오 게임의 개발 환경을 제공하는 게임 엔진.
https://unity3d.com/kr/get-unity/download
Download Unity!
Unity is the ultimate game development platform. Use Unity to build high-quality 3D and 2D games, deploy them across mobile, desktop, VR/AR, consoles or the Web, and connect with loyal and enthusiastic players and customers.
unity3d.com
위의 링크에 들어가서
유니티 허브를 다운받는다.
유니티 허브를 받으면 여러가지 버전의 유니티를 설치하고 관리할 수 있다.
새로운 유니티 버전을 설치하고 싶다면 추가를 눌러서 설치하면 된다.
[유니티] 2. 에디터 인터페이스 소개 (0) | 2019.12.28 |
---|
언제 S가 V해?
When do S V?
When does the teacher come?
When does this class finish?
S는 무엇을 V해?
무엇을 S는 V해?
What do S V?
What do we do?
What do teachers like?
What do you do in the morning?
What does your mother drink?
What do you do after drinking coffee?
What does he like?
왜 S는 V해?
Why do S V?
Why do they have lunch?
Why does he like english?
왜 S는 V하지 않아?
Why don't S V?
Why doesn't he take his book out?
Why doesn't your mother drink coffee?
얼마나 오래 S는 V해?
How long do S V?
How long do you run in the morning?
몇시간 S는 V해?
S는 몇시간 V해?
How many hours do S V?
How many hours do you work a day?
몇 일
How many days
How many days does he run a week?
얼마나 많이
How much
S는 어떻게 V해?
어떻게 S는 V해?
How do S V?
How does he study english?
S는 V해?
Do S V?
Do you study?
Do they dance everyday?
Does he exercise everyday?
수업중
in class
S도 V않다
<sentence>, either.
그럼...
Then...
The pessimist sees difficulty in every opportunity.
But the optimist sees opportunity in every difficulty.
비관주의자는 모든 기회에서 어려움을 보고,
낙관주의자는 모든 어려움에서 기회를 본다.
Every problem is an opportunity for us to grow.
모든 문제는 우리가 성장할 수 있는 기회다.
Evey failure is a step to success.
모든 실패는 성공으로 가는 한걸음이다.
Don't wish for it. work for it.
그것을 바라지말고, 그것을 위해 노력하라.
[100단어 영어회화의 기적] 복습 (0) | 2019.12.30 |
---|---|
Shall (0) | 2019.12.29 |
[100단어 영어회화의 기적] DAY 8 - 나만의 정리 (0) | 2019.12.26 |
[100단어 영어회화의 기적] DAY 7 - 나만의 정리 (0) | 2019.12.24 |
[100단어 영어회화의 기적] DAY 5 - 나만의 정리 (0) | 2019.12.18 |
인터넷 사용자는 원하는 정보를 얻기위해 검색엔진을 이용한다.
검색엔진은 봇을 이용해 웹사이트의 정보를 수집한다.
그리고 이용자가 검색할 만한 키워드를 예상하여 키워드에 대응되는 인덱스를 만들어 둔다.
인덱스 생성 시 사용되는 정보는 결국 HTML코드이다.
즉, 검색엔진은 HTML코드로 의미를 파악해야하는데 이때 시맨틱 요소를 해석한다.
검색엔진은 <h1>요소 내의 콘텐츠를 웹 문서의 주요 제목으로 인식하고 인덱스에 포함할 확률이 높다.
즉, 시맨틱 태그란 브라우저, 검색엔진, 개발자 모두에게 콘텐츠를 명확히 설명하는 역할을 한다.
시맨틱 웹이란 웹페이지들에 메타데이터를 부여하여 의미와 관련성을 가지는 데이터베이스로 구축하려는 것을 의미한다.
HTML 요소는 non-semantic 요소, semantic 요소로 구분할 수 있다.
non-semantic | div, span 등이 존재. 콘텐츠와 상관이 없음. |
semantic | form, table, img 등이 있으며, 콘텐츠의 의미를 담고있다. |
태그 | 의미 |
header | 헤더를 의미한다. |
nav | 내비게이션을 의미한다. |
aside | 사이드에 위치한 공간을 의미한다. |
section | 본문의 여러 내용을 포함하는 공간을 의미한다. |
article | 본문의 주 내용이 들어가는 공간을 의미한다. |
footer | 푸터를 의미한다. |
출처
https://poiemaweb.com/html5-semantic-web
Semantic Web | PoiemaWeb
검색엔진은 대체로 h1 요소 내의 콘텐츠를 웹문서의 중요한 제목으로 인식하고 인덱스에 포함시킬 확률이 높다. 또한 사람도 h1 요소 내의 콘텐츠가 제목임을 인식할 수 있다. 시맨틱 요소로 구성되어 있는 웹페이지는 검색엔진에 보다 의미론적으로 문서 정보를 전달할 수 있고 검색엔진 또한 시맨틱 요소를 이용하여 보다 효과적인 크롤링과 인덱싱이 가능해졌다. 즉, 시맨틱 태그란 브라우저, 검색엔진, 개발자 모두에게 콘텐츠의 의미를 명확히 설명하는 역할을 한다.
poiemaweb.com
[HTML] 4. HTML 기본 태그 (0) | 2019.12.24 |
---|---|
[HTML] 2. HTML5 기본 문법 (0) | 2019.12.18 |
[HTML] 1. 프런트엔드 개발자 학습 방향 (0) | 2019.12.17 |