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

key 기준으로 정렬

다른 시퀀스 자료형과 같이 sorted 함수 사용

 

value 기준으로 정렬1

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]))

 

value 기준으로 정렬2

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]))
  • 수치 연산 함수
    •  abs
      • 인자로 숫자를 전달하면 그 숫자의 절대값을 반환하는 함수
    • divmod
      • 첫 번째 인자를 두 번째 인자로 나눴을 때의 몫과 나머지를 튜플 객체로 반환하는 함수
    • pow
      • 첫 번째로 전달된 인자 값에 대해 두 번째로 전달된 인자 값으로 제곱한 결과를 반환하는 함수
  • 시퀀스/반복 가능한 자료형을 다루는 함수
    •  all
      • 반복 가능한 자료형인 List, Tuple, Set dictionary, 문자열 등을 인자로 전달하여 항목 모두가 True로 평가되면 True를 반환하고, False로 평가되는 항목이 하나라도 있으면 False를 반환하는 함수
    • any
      • 반복 가능한 자료형인 List, Tuple, Set, dictionary, 문자열 등을 인자로 전달하여 항목 모두가 False로 평가되면 False를 반환하고, True로 평가되는 항목이 하나라도 있으면 True를 반환하는 함수
    • enumerate
      • List, Tuple, 문자열과 같은 시퀀스형을 입력받아 인덱스를 포함하는 Tuple 객체를 항목으로 구성하는 enumerate 객체를 반환하는 함수
    • filter
      • 조건에 해당하는 항목을 걸러내는 함수
    • list, tuple, set, dict
      • 반복 가능한 자료형을 인자로 전달 받아 각각 리스트, 튜플, 셋, 딕셔너리로 변환해 반환하는 함수
    • map
      • 두 번째 인자로 반복 가능한 자료형을 전달 받아 자료형의 각 항목에 대해 첫 번째 인자로 전달 받은 함수를 적용한 결과를 맵 객체로 반환하는 함수 
    • max
      • 반복 가능한 자료형을 인자로 전달받아 항목 중 가장 큰 값 반환
    • min
      • 반복 가능한 자료형을 인자로 전달받아 항목 중 가장 작은 값 반환
    • range
      • 첫 번째 인자로 전달된 시작 값, 두 번째 인자로 전달된 종료 값, 세 번째 인자로 전달된 증감치로써 시퀀스형 객체를 생성하는 함수
      • 이 때, 두 번째 인자로 전달된 종료 값은 포함되지 않음
    • sorted
      • 반복 가능한 자료형을 인자로 전달받아 항목들로부터 정렬된 리스트를 생성해 반환하는 함수
    • zip
      • 둘 이상의 반복 가능한 자료형을 인자로 전달받아, 동일 위치의 항목을 묶어 튜플을 항목으로 구성하는 zip객체를 생성하는 함수
      • 이 때, 인자로 전달된 객체는 동일 자료형이면서, 항목의 개수가 같아야 함
  • 변환 함수
    •  chr
      • 정수 형태의 유니코드 값을 인자로 전달받아 해당 코드의 문자를 반환하는 함수
    • ord
      • 문자를 인자로 전달 받아 유니코드 값(10진 정수)을 반환하는 함수
    • hex
      • 10진 정수 값을 인자로 전달 받아 16진수로 변환된 값을 반환하는 함수
    • int
      • 인자로 전달된 숫자 형식의 문자열, 부동소수점 숫자를 정수로 변환한 값을 반환하는 함수
    • float
      • 인자로 전달된 숫자 형식의 문자열, 정수를 부동소수점 숫자로 변환한 값을 반환하는 함수
    • str
      • 인자로 전달된 객체에 대한 문자열 변환 값을 반환하는 함수
  • 객체 조사를 위한 함수
    •  dir
      • 인자로 전달된 객체가 가지고 있는 변수, 메서드와 같은 속성 정보를 리스트 객체로 반환
      • 인자를 전달하지 않고 호출하면 현재 지역 스코프에 대한 정보를 리스트 객체로 반환
    • globals
      • 현재의 전역 심볼 테이블을 보여주는 딕셔너리를 반환하는 함수
      • 전역변수와 함수, 클래스의 정보 포함
    • locals
      • 현재의 지역 심볼 테이블을 보여주는 딕셔너리를 반환하는 함수
      • 매개변수를 포함한 지역변수와 중첩함수의 정보 포함
    • id
      • 인자로 전달된 객체의 고유 주소(참조값)을 반환하는 함수
    • isinstance
      • 첫 번째 인자로 전달된 객체가 두 번째 인자로 전달된 클래스의 인스턴스인지에 대한 여부를 True/False로 반환하는 함수
    • issubclass
      • 첫 번째 인자로 전달된 객체가 두 번째 인자로 전달된 클래스의 서브클래스인지에 대한 여부를 True/False로 반환하는 함수
  • 실행 관련 함수
    • eval
      • 실행 가능한 표현식의 문자열을 인자로 전달받아 해당 문자열의 표현식을 실행한 결과값을 반환하는 함수

 

unpack 연산자 *

요즘 알고리즘과 프로그래밍언어 같이 공부하기 글과 같이 백준온라인의 '단계별로 풀어보기'를 통해 문제를 풀고 있습니다.

그 중 '별찍기 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) #현 단계 삼각형을 오른쪽으로 민다

전체 소스코드 입니다.


tortoisesvn은 SubWCRev라는 프로그램을 제공하는데, 이 프로그램을 이용해서 서브버전 상태를 읽어서 파일로 저장할 수 있다. 미리 정의된 키워드들을 포함한 파일을 하나 만들어두고 SubWCRev으로 해당 파일을 지정하면 해당 파일 내 키워드들이 상태값으로 치환된 새로운 파일이 생성된다. command line에서 아래와 같이 실행하면 된다.

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가 중복선언 된다.

아래 참조


JDK 설치

이클립스 설치

CDT 설치

서버측(수신측) 소켓 생성시 주소값에 넣어주는 INADDR_ANY의 의미란?


http://mintnlatte.tistory.com/555

+ Recent posts