ubuntu 16.04 LTS에서 python 3.8 설치
$ sudo apt update
$ sudo apt install software-properties-common
$ sudo add-apt-repository ppa:deadsnakes/ppa
$ sudo apt update
$ sudo apt install python3.8
ubuntu 16.04 LTS에서 python 3.8 설치
$ sudo apt update
$ sudo apt install software-properties-common
$ sudo add-apt-repository ppa:deadsnakes/ppa
$ sudo apt update
$ sudo apt install python3.8
다른 시퀀스 자료형과 같이 sorted 함수 사용
items 함수는 Key와 Value의 쌍을 튜플로 묶은 값을 dict_items 객체로 돌려준다.
d = {"TV": 2000000, "냉장고": 1500000, "책상": 350000, "노트북": 1200000, "가스레인지": 200000, "세탁기": 1000000} sd = sorted(d.items(), key=lambda x: x[1], reverse=True) for i in sd: print("{0}: {1}".format(i[0], i[1]))
import operator d = {"TV": 2000000, "냉장고": 1500000, "책상": 350000, "노트북": 1200000, "가스레인지": 200000, "세탁기": 1000000} sd = sorted(d.items(), key=operator.itemgetter(1), reverse=True) for i in sd: print("{0}: {1}".format(i[0], i[1]))
unpack 연산자 *
https://conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html
요즘 알고리즘과 프로그래밍언어 같이 공부하기 글과 같이 백준온라인의 '단계별로 풀어보기'를 통해 문제를 풀고 있습니다.
그 중 '별찍기 11 - 2448'에 대한 풀이 입니다.
주어진 라인수만큼 별을 찍는 문제인데요 라인수 N은 3, 6, 12, 24, 48, ... 와 같이 3*2^k (k <=10) 입니다.
N = 3 일 때, 아래와 같이 프린트해야하며 아래 삼각형이 기본 단위가 되겠습니다.
***
****
*****
N = 6 일 때,
******
***** *
********
*********
**********
***********
N = 12 일 때,
************
*********** *
**************
***************
****************
*****************
******************
***** *********** *
********************
*********************
**********************
***********************
요런 식인데요, 잘 보면 규칙성이 있습니다.
다음 단계 삼각형은 현 단계 삼각형 두 개가 아래에 위치하 것과 같은 모양이 됩니다.
그래서 저는 다음과 같이 문제를 풀었습니다.
"현 단계 삼각형 두 개를 만들어서 뒤에 붙이고 현 단계 삼각형을 오른쪽으로 민다."
N = 6 일 때,
1. 현 단계 삼각형
***
****
*****
2. 현 단계 삼각형 두 개를 만들어서 뒤에 붙인다
***
** *
*****
*********
**********
***********
3. 현 단계 삼각형을 오른쪽으로 민다.
******
***** *
********
*********
**********
***********
위의 3번에서 "현 단계 삼각형을 오른쪽으로 민다"고 했는데요,
그렇다면 '오른쪽으로 얼마나 밀어야하는가?'가 문제입니다.
요것도 규칙이 있습니다.
기본적으로 아래와 같이 삼각형을 갖고 있다면,
***
****
*****
N = 3 일 때, 0칸
N = 6 일 때, 3칸
N = 12 일 때, 6칸
...
N = 3 × 2^k 이므로, 오른쪽으로 미는 칸 수는 바로 3 × 2^(k - 1)가 되겠습니다. 아래와 같은 수식으로 k를 구할 수 있습니다.
log₂(N ÷ 3) = log₂(3 × 2^k ÷ 3) = log₂2^k = k
구현은 파이썬 언어를 사용했습니다.
저는 기본 삼각형을 아래와 같이 1차원 배열로 선언하고
s = [" * ", " * * ", "***** "] #삼각형 사이에 빈 칸 하나 있음을 고려
다음 단계 삼각형을 만드는 함수를 아래와 같이 선언했습니다.
def makeStar(shift): c = len(s) for i in range(c): s.append(s[i] + s[i]) #현 단계 삼각형을 뒤에 붙이고 s[i] = (" " * shift + s[i] + " " * shift) #현 단계 삼각형을 오른쪽으로 민다
전체 소스코드 입니다.
SubWCRev WorkingCopyPath [SrcVersionFile DstVersionFile] [-nmdfe]
이 곳에서 예제도 확인할 수 있다.
헤더파일이 많아지면 중복해서 include 될 수도 있다.
이를 방지하기 위해 조건부 컴파일을 사용한다.
예>
/** * @file good_1915.h * @brief 헤더파일 중복 include 방지 예제 */ /*start of header */ #ifndef good_1915_H #define good_1915_H // 내용 #endif /* end of header */
전역변수는 소스파일에 선언하는 것이 바람직하다.
다른 소스파일에서 해당 전역변수를 사용해야된다면 헤더파일에 extern 키워드로 명시한다.
이유는 각 파일들이 header파일을 include하는데,
만약
A.h에 int g_aaa가 선언되어 있을때,
B.h 및 C.h가 다음과 같이 #include "A.h"를 가지고 있다고 가정하면,
특정 소스파일에서
#include "B.h"
#include "C.h"
를 했을때, int g_aaa가 중복선언 된다.