728x90

간단한 문제를 풀다가 sort()를 사용해서 list를 정렬할 일이 있었다.

def example( _list) :
    _list = _list.sort()
    return _list

print(example([1,2,3])

당연히 정렬된 리스트가 반환될 것이라고 생각했는데 none이 반환되었다. 

 

그래서 구글링을 해보니 sort()는 정렬을 해주긴 하지만 그 값을 리턴해주는 것은 아니라고 한다.  원하는 반환값을 얻기 위해서는 sorted()라는 함수를 추가적으로 사용해야 한다고 한다.

 

def example( _list) :
    _list = sorted(_list)
    return _list

print(example([1,2,3])

 

728x90

'python > 문제' 카테고리의 다른 글

[Python] 재귀호출을 이용한 문자열 뒤집기  (0) 2022.07.20
[백준/2231]분해합  (0) 2021.10.28
[백준,10809]알파벳 찾기  (0) 2021.03.04
[백준,2675]문자열반복  (0) 2021.03.04
[백준, 11654] 아스키코드  (0) 2021.03.04
728x90

2,3일차 수업하면서 작성한거 다 날라감ㅠ

1.transform : 오브젝트 조절에 사용되는 속성

1.1 rotate : 평면적인 회전에 사용 , 음수도 가능

1.2 scale : 확대, 축소에 사용, scale(width, height)의 형식으로 사용

1.3 skew : x,y축을 기준으로 입력한 각도만큼 비틂

1.4 translate : x,y축으로 좌표 이동을 시킴

1.5 transform은 가장 나중에 작성한 속성만 적용됨

더보기
<style>
	#try{
    	width : 100px;
        height : 100px;
        background-color : blueviolet;
        margin : 200px 0 0 200px;
        <!--나중에 적은 skew만 적용됨-->
        transform : rotate(20deg);
        transform : skew(10deg, 20deg);
    }
</style>

<p id="try"></p>

2.prefix를 사용해서 다양한 브라우저의 최신버전에서 사용이 가능함

transition, transform속성값들은 css최신 언어이기 때문에 안되는 곳도 있을 수 있음

3.Transition : 변화의 과정을 보여줄 때 사용

3.1 protperty, duration, timig-function, delay등이 있음

3.1.1 transition : width 2s linear 1s의 형태로 간결하게 사용함

3.1.2 숫자중에 먼저 나오는것이 dulation

3.1.3 숫자를 하나만 사용할 경우엔 delay

3.1.4 시간값을 나타내는 속성(timing, delay)의 순서만 제외하면 순서는 마음대로

3.2 마우스를 올렸을 때를 의미하는 hover랑 많이 사용한다.

4. animation 

4.1 keyframes 속성을 통해 어떻게 작동하는지 명명 ( 이때 name속성이 활용됨)

4.2 대략적인 속성은 위와 비슷함

4.3 얼마나 반복할 것인지(-iteration-count)와 어떤 방향으로 진행할 것인지(alternate)가 추가됨

4.5 한줄로 사용 가능함 

4.6 prefix 에니메이션을 작성하면 keyframes도 동일하게 prefix를 달아서 작성해야 함

더보기
<style>
	.animation {
        width: 300px;
        height: 300px;
        background-color: yellow;
        animation-name : changeWidth;
        animation-duration : 3s;
        animation-timing-function : linear;
        animation-delay : 1s;
        animation-iteration-count : 6;
        animation-direction : alternate;
    }

    @keyframes changeWidth {
        from {
            width : 300px;
    	}
        to {
            width : 600px;
    	}
    }
</style>

<p class='animation'></p>

5. media query : 태블릿, 모바일 등에 대응하는 반응형,적응형 

5.1 min-width,max-width로 가로폭을 설정

5.2 @media ( min) and (max) {} 의 형태로 사용. {} 안에서 새로 css를 작성

5.3 html head태그 안에 viewport가 반드시 들어가 있어야 함

<meta>

5.3.1 화면의 너비와 배율의 설정을 담당하는 부분

5.4 미디어쿼리 바깥에서 사용된 css 속성은 그대로 상속됨

5.4.1 상속을 받지 않기 위해서는 none 속성을 사용해야 함

728x90

'특강 복습 > 엘리스' 카테고리의 다른 글

9일차  (0) 2022.07.10
8일차  (0) 2022.07.06
7일차  (0) 2022.07.06
6일차  (0) 2022.07.04
2일차-실습  (0) 2022.06.28
728x90

1. h1 : 해당 웹페이지에서 가장 중요한 정보이기 때문에 하나만 존재해야 한다.

2. article 안에는 반드시 h태그가 필요하다

    2.1 해당 article에 어떤 정보가 저장되는지 알기 위해서

3. css에서 원하는 부분만 적용하고 싶을때 부모자식 관계를 명확하게 해야함

4.css에는 우선순위가 존재(캐스케이딩)

    4.1 나중에 작성된게 적용됨

<h1>Hello World</h1>


<style>
	h1 {color : red;}
    h1 {color : blue;}
<---!파란색으로 나오게 됨--->
</style>

Hello World

    4.2 좀 더 디테일하게 정의된게 적용됨

728x90

'특강 복습 > 엘리스' 카테고리의 다른 글

9일차  (0) 2022.07.10
8일차  (0) 2022.07.06
7일차  (0) 2022.07.06
6일차  (0) 2022.07.04
4일차  (0) 2022.06.30
728x90

책에서 기억하고 싶은 내용

-우리 모두는 자신이 짠 쓰레기 코드를 쳐다보며 나중에 손보겠다고 생각한 경헙이 있다. 우리 모두는 대충 짠프로그램이 돌아간다는 사실에 안도감을 느끼며 그래도 안돌아가는 프로그램보다 돌아가는 쓰레기가 좋다고 스스로를 위로한 경험이 있다. 다시 돌아와 나중에 정리하겠다고 다짐했었다. 물론 그때 그 시절 우리는 르블랑의 법칙을 몰랐다. 나중은 결코 오지 않는다.(P.4)

-중복을 피하라. 한 기능만 수행하라. 제대로 표현해라. 작게 추상화해라. 이상이다.(P.14)

 

 

 

 

 

소감

-이런저런 핑계를 대면서 책읽기를 미루다가 노개북 참여도 늦게 시작했다. 오늘까지 읽어야 하는 분량까지 다 읽으려 했지만 오랜만에 읽은 책은 너무 어려워서 실패했다. 그래도 설 연휴동안 내용을 다 따라 잡아야겠다.

-이 책은 가볍게 읽고 넘어가는게 아니라 오랜 시간을 들여서 투자를 해야한다.

-깨끗한 코드에 대한 해석은 여러가지가 존재한다. 이 책의 저자는 읽기 쉬운 코드가 깨끗한 코드라고 생각하고 있다. 

-1장에선 책에 클린코드란 무엇인지, 왜 클린코드를 작성해야하는지 설명하고 있다. 2장에선 이름을 정하는 법에 중점을 두고 이야기 하고 있다. 변수나 함수의 이름을 적을때 짧은게 좋은게 아닐까라는 생각을 가지고 있었는데, 길어도 나중에 다시 보거나 다른 사람이 읽을때 어떤 의도를 가지고 있는 변수인지 알 수 있는 코드가 좋다는 사실을 알게되었다. 또, 알려주는 방법들이 구체적인 방법들이여서 바로 적용해볼 수 있을 것 같았다.

728x90

'특강 복습 > 노개북' 카테고리의 다른 글

개발자 북클럽 인증글  (0) 2022.01.11
728x90

클린 코드라는 책을 구매한 영수증

 

군대에선 책을 열심히 읽었었는데 전역하고 나선 책을 전혀 읽지 않았다.

이번 기회에 다시 책을 읽어봐야겠다.

728x90

'특강 복습 > 노개북' 카테고리의 다른 글

TIL [21.01.30]  (0) 2022.01.30
728x90

◯문제 링크

 

2231/분해합

 

◯코드 미리보기

N = int(input())
K = N
finish = False
_lenN = 0

while 0 < K:
    K //= 10
    _lenN += 1


for i in range(_lenN*9, 0, -1): 
    if  N < i:                  
        continue       
    else :
        M = N - i
        _strM = str(M)
        plusM = 0
        
        for z in range(len(str(M))):
            plusM += int(_strM[z])
        if i == plusM:
            print(M)
            finish = True
            break

if finish == False:
    print(0)

 

 

 

설명

N = int(input())
K = N
finish = False
_lenN = 0

N : 처음에 주어지는 자연수 

K : N의 값을 가지는 변수, 자연수의 길이를 측정하기 위해 사용

(python에서는 str로 변환후에 len을 사용함으로써 더 간단하게 할 수 있지만 다른 언어에서도 사용하기 위해 알고리즘활용)

finish : 분해합이 없는 경우 0을 출력해주기 위해 사용하는 변수

_lenN : 자연수의 길이를 저장하기 위한 변수

 

while 0 < K:
    K //= 10
    _lenN += 1

while문을 활용해서 K의 값이 0보다 같거나 작아질때 까지 10으로 K를 나누고 그 몫을 K에 저장한다. 그 다음 _lenN을 1 증가시킨다. 

while문이 종료되었을 때는 최종적으로 _lenN에 N의 길이가 저장된다.

 

for i in range(_lenN*9, 0, -1): 
    if  N < i:                  
        continue       
    else :
        M = N - i
        _strM = str(M)
        plusM = 0
        for z in range(len(str(M))):
            plusM += int(_strM[z])
            
        if i == plusM:
            print(M)
            finish = True
            break

for문의 시작은 _lenNx9부터 시작하고 0까지 1씩 감소한다.

이렇게 하면 N에서 각 자릿수의 합을 뺀 값인(=N의 생성자인) M의 후보를 가장 큰 작은 값에서 부터 만들수 있기 때문이다. (각 자릿수에서 가장 큰 값은 9이기 때문에)

if문을 사용해서 N의 크기보다 i값이 클경우엔 continue를 실행하게 한다. 

>>N보다 i가 크다는건 각 자릿수의 합이 자연수보다 크다는 것으로 말이 안된다.

N의 크기보다 i값이 작을 경우 N에서 i를 빼서 M을 지정해준다. 

그 다음 M의 각 자릿수의 합을 for문을 통해서 더해준다.

(len(str(M))을 통해서 길이를 구한다음 그만큼 for문 반복을 돌려 각 자릿수를 더한다)

 

이렇게 해서 나온 값이 i(주어진 자연수의 각 자릿수의 합)과 일치한다면, 가장 작은 분해합이 되므로 출력해주고 finish를 True로 바꾸어준다.

 

if finish == False:
    print(0)

만약 분해합이 존재하지 않는 경우에는 0을 출력해준다.

 

배운 것

⩥for문을 거꾸로 사용하는 방법

 1)range를 reversed()로 감싸서 리스트를 뒤집는다

 2)range의 step(3번째 인자)을 -1로 바꿔서 하나씩 감소하게 한다

⩥숫자의 길이를 구하는 알고리즘(python에서 사용하는 것과 다른 언어에서도 사용할 수 있는 것)

728x90
728x90

◯문제 링크

 

[백준,2798]블랙잭

 

◯코드 미리보기

#include <iostream>
#include <vector>
using namespace std;

int main() {
	int howManyCard_N, baseNum_M, numInput, plusResult, largest=0;
	vector<int> cardList;
	vector<int> plusList;

	cin >> howManyCard_N >> baseNum_M;

	for (int i = 0; i < howManyCard_N ; ++i) {//++i를 쓰면 속도가 더 빠르다고 한다.
 		cin >> numInput;
		cardList.push_back(numInput);
	}
    
	for (int a = 0; a < howManyCard_N; a++) {
		for (int b = a + 1; b < howManyCard_N; b++) {
			for (int c = b + 1; c < howManyCard_N; c++) {
				plusList.push_back(cardList[a] + cardList[b] + cardList[c]);
			}
		}
	}

	for (auto plusResult : plusList) { //for문의 범위를 배열의 값에 기반해서 돌리는 기능
		if (plusResult <= baseNum_M) {
			if (largest < plusResult) {
				largest = plusResult;
			}
		}
	}

	cout << largest;

	return 0;
}

 

 

설명

#include <iostream>
#include <vector>
using namespace std;

int main() {
	int howManyCard_N, baseNum_M, numInput, plusResult, largest=0;
	vector<int> cardList;
	vector<int> plusList;

코드 초반부.

iostream과 vector는 헤더파일의 이름이다. 

iostream은 표준 라이브러리 디렉토리, vector는 vector클래스를 사용하기 위한 헤더파일이다.

vector : 시퀀스 컨테이너(데이터를 선형으로 저장하는 컨테이너)의 일종. 리스트와는 달리 새로운 요소가 추가될 때마다 뒷부분에 추가해서 길이가 늘어난다.

 

main함수 아래에는 이번 코드에서 사용된 변수들이 선언되어 있다. 

눈여겨 볼 것은 cardList와 plusList이다. 이 둘은 위에서 언급한 vector의 형태로 선언되어 있다. 여기서 알 수 있는 것은 'vector<원하는 데이터 타입> 원하는 이름'의 형태로 선언을 한다는 것을 알 수 있다. 

 

	cin >> howManyCard_N >> baseNum_M;

	for (int i = 0; i < howManyCard_N ; ++i) {//++i를 쓰면 속도가 더 빠르다고 한다.
 		cin >> numInput;
		cardList.push_back(numInput);
	}
    

문제에서 제시된 값들을 받아주는 코드이다. 

 

먼저 첫줄엔 2개의 변수를 받는다. c언어에선 map함수를 이용했던 것 과는 달리 c++에선 단순히 화살표(>>)를 추가해 줌으로써 두개의 변수를 한 줄에 받을 수 있다. 

 

for문에서는 두번째 줄에 입력되는 변수를 받는다. for문의 범위를 howManyCard_N만큼 설정해서 루프를 돌리고, 안에서는 숫자를 입력받고 push_back함수를 이용해서 입력받은 numInput변수를 cardList안에 저장한다. (vector클래스.push_back(저장하고싶은 변수)의 형태로 사용)

 

 

	for (int a = 0; a < howManyCard_N; a++) {
		for (int b = a + 1; b < howManyCard_N; b++) {
			for (int c = b + 1; c < howManyCard_N; c++) {
				plusList.push_back(cardList[a] + cardList[b] + cardList[c]);
			}
		}
	}

다음으로 나오는 for문은 카드의 모든 합을 계산하는 for문이다.

처음 for문에서는 카드의 갯수만큼 반복을 돌린다. 두번째는 첫번째 for문의 증가하는 변수 a에 1을 더한 값부터 시작해서 똑같이 가트의 갯수까지만 반복을 돌린다. 세번째도 두번째의 증가하는 변수 b에 1을 더한 값부터 시작한다. 그리고 각각의 숫자를 vector의 위치로 받아서(vector도 배열이기 때문에 list와 똑같은 방식으로 위치를 선택할 수 있다.) 모든 값을 더한다. 그 다음 plusList에 바로 저장해준다.(plusList는 vector이다)

 

 

	for (auto plusResult : plusList) { //for문의 범위를 배열의 값에 기반해서 돌리는 기능
		if (plusResult <= baseNum_M) {
			if (largest < plusResult) {
				largest = plusResult;
			}
		}
	}
    
    	cout << largest;

	return 0;
}

그 다음 해야될 것은 근접한 최대값을 찾는 것이다. 두가지 포인트로 나눠서 생각할 수 있는데, 딜러가 외친 숫자보다 작은지 확인 하는 것이랑, 그 중에서 최대값을 찾는 것이다.

먼저 딜러가 외친 숫자보다 작거나 같은 값을 찾기 위해서 if문을 사용했다. 그 다음, 그 중에서 최대값을 찾기 위해서 다시 한번 if문을 사용한다. 만약 조건에 해당하게 되면 largest에 값을 저장하게 된다. largest는 선언할 때 0이라는 값을 할당했기 때문에 처음 들어온숫자는 무조건 저장되게 된다. 

이러한 과정들은 모두 for문안에서 작동한다. for문을 눈여겨 봐야 하는데, 이런 형식으로 사용하면 배열의 크기만큼만 반복을 실행하게 된다. plusResult는 배열의 값을 가지게 되는 변수로, 원하는 변수를 넣으면 된다. plusList는 내가 반복 시키고 싶은 배열이 들어오는 자리이다. 

 

그 다음 결과를 출력해준 뒤 함수를 종료한다.

 

배운 것

⩥vector클래스 : 시퀀스 컨테이너의 일종. 새로운 값을 추가할 때 특정 요소를 지정하는 것이 아니라 vector의 뒷부분에 새로운 요소를 추가하는 방식으로 길이를 늘릴 수 있음. 

사용하려면 vector파일을 include해야한다.

⩥for 범위 반복

    시작과 끝을 지정하지 않고 처음부터 끝가지 순회를 하는 반복문

    for(데이터타입 변수이름 : 데이터리스트)의 형태로 사용한다. 이 때, 데이터 리스트는 선형 구조여야 한다.

    주의할 점은 기존의 for문과는 달리 i를 이용해서 조절하지 않고 데이터 리스트속의 값만을 가지고 동작한다는 것이다.

auto키워드 : 사용하는 초깃값의 형식에 맞춰 선언하는 변수의 형식이ㄹ 자동으로 결정된다. 

728x90

'c & c++ > 문제' 카테고리의 다른 글

[백준, 1330] 두 수 비교하기  (0) 2021.06.25
728x90

◯문제 링크

 

[백준,1330]/ 두 수 비교하기

 

◯코드 미리보기

#include <iostream>
using namespace std;

int main() {
	int num1, num2;
	int result[5];
	cin >> num1>> num2;		
    
	result[0] = num1 + num2; //배열의 첫번째는 덧셈
	result[1] = num1 - num2; //배열의 두번째는 뺄셈
	result[2] = num1 * num2; //세번째는  곱
	result[3] = num1 / num2; //네번째는 나눗셉
	result[4] = num1 % num2; //마지막은 나머지

	for (int i = 0; i < 5; i++)
		cout << result[i] << endl;

	return 0;
}

 

 

 

 

설명

 

#include <iostream>
using namespace std;

iostream은 c++에서 c언어의 stdio헤더 파일과 비슷한 역할을 하는 파일이다.

using namespace std는 표준 네임 스페이스를 사용하겠단 의미이다.

 

int main() {
	int num1, num2;
	int result[5];
	cin >> num1>> num2;	

함수에서 사용하기 위한 변수를 선언하는 코드이다. 

num1과 num2는 숫자를 입력받기 위한 변수 2개이고, result는 결과를 저장하기 위한 1차원 배열이다.

맨 마지막 줄의 cin은 c언어에서의 scanf와 같은 역할이다. >>를 연달아 사용한 것은 한 줄에 입력받기 위해서이다.  

c++에서는 >>와 <<를 사용해서 여러 변수를 사용할 수 있다. 

 

	result[0] = num1 + num2; //배열의 첫번째는 덧셈
	result[1] = num1 - num2; //배열의 두번째는 뺄셈
	result[2] = num1 * num2; //세번째는  곱
	result[3] = num1 / num2; //네번째는 나눗셉
	result[4] = num1 % num2; //마지막은 나머지

이 문제의 핵심인 사칙연산이다.

 

	for (int i = 0; i < 5; i++)
		cout << result[i] << endl;

	return 0;
}

그렇게 나온 결과값들을 for문을 이용해서 출력해준다.

for문 안에는 cout 명령어가 있는데 이는 c언어의 printf문가 동일한 것이다. cin과는 다르게 <<를 이용해서 문자열들을 연결하고 출력한다.

endl은 c언어의 \n과 같은 기능이다. 

 

◯배운 것◯

⩥cin과 cout : c++에서의 출력과 입력

⩥c++에서 기본으로 선언해야 할 것(io

⩥c++에서의 줄바꿈 

 

 

 

 

728x90

'c & c++ > 문제' 카테고리의 다른 글

[백준,2798]블랙잭  (0) 2021.07.04

+ Recent posts