728x90
728x90

 내가 푼 과정 

- 먼저 입력 받은 값이 5의 배수가 아닐경우 값에서 3을 빼고 count 를 1증가

- 값이 2보다 작을 경우에는 더이상 3으로 뺄 수 가 없으므로 -1을 반환한다.

 

 소스코드 

 

N = int(input())
result = 0
while True:
    if N%5 !=0 :
        if N <=2:
            result = -1
            break
        N = N -3
        result += 1
    else:
        result += N//5
        break
print(result)

# N = 18
# >>> 4
# N = 4
# >>> -1

역시 응용을 하는데 시간이 좀 걸리는 것 같다.

728x90
728x90

2020년 9월 25일

코딩 테스트를 대비해 개념을 학습 하면서 문제를 풀고 있다.

자료구조와 알고리즘을 배우면서 개념을 이해하고는 있지만, 아직은 문제에 적요하는데에 힘든 부분이 있다.

블로그에 포스팅을 하면서 다시한번 정리해보고자 한다.

 


대소문자 변환

- 파이썬에서 문자열은 문자 단어 들의 집합

- 문자열은 List와 같이 슬라이싱 이나 인덱싱등을 사용할 수 있다.

 upper() 

문자열안의 '소문자'들을 '대문자'로 변환

 

text = 'Hello World'
print(text.upper())

>>>HELLO WORLD

 lower() 

문자열안의 '대문자'들을 '소문자'로 변환

 

text = 'Hello World'
print(text.lower())

>>>hello world

 capitalize() 

문자열의 '첫 글자를 대문자'로 만들고 나머지를 '소문자'로 반환한다.

 

text = 'Hello World'
print(text.capitalize())

>>>Hello world

문자열 비교

 문자열A in 문자열B  

문자열A가 문자열B에 포함되어 있는지 여부를 Boolean 타입으로 반환한다.

 

textA = 'XYPV'
textB='EOGGXYPVSY'
print(textA in textB)

>>>True

 


문자열 조작하기

 문자열[start:end:step] 

 

문자열 슬라이싱 == 리스트 슬라이싱

 

# 길이가 10인 text 를 0~3까지 슬라이싱
text = 'GOFFAKWFSM'
print(text[:4])

>>>GOFF

 문자열[ : : -1]  == 역순

 

문자열 회문 문제 경우 문자열의 순서를 뒤집어야 하는데 이때 슬라이싱을 이용해 역순으로 된 문자열을 구할 수 있다.

 

text = 'GOFFAKWFSM'
print(text[::-1])

>>>MSFWKAFFOG

 

 

 2차원 문자열 리스트의 세로 문자열 구하기 

 

회문 문제에서는 가로에서 일치하는 회문 뿐만 아니라 세로로도 일치하는 문자열을 묻는 경우가 있다.

이떄 2차원 리스트의 요소 접근 방법을 이용해서 기존의 2차원 문자열의 세로문자들로 이루어진 2차원 문자열 리스트를 만들 수 있다.

 

# 10 * 10 인 2차원 문자열 리스트
text_list = ['GOFFAKWFSM',
             'OYECRSLDLQ',
             'UJAJQVSYYC',
             'JAEZNNZEAJ',
             'WJAKCGSGCF',
             'QKUDGATDQL',
             'OKGPFPYRKQ',
             'TDCXBMQTIO',
             'UNADRPNETZ',
             'ZATWDEKDQF']

vertical_text_list = []
for x in range(10):
    text = ''
    for y in range(10):
        text += text_list[y][x]
    vertical_text_list.append(text)

print(vertical_text_list)

>>>['GOUJWQOTUZ', 
    'OYJAJKKDNA', 
    'FEAEAUGCAT', 
    'FCJZKDPXDW', 
    'ARQNCGFBRD', 
    'KSVNGAPMPE', 
    'WLSZSTYQNK', 
    'FDYEGDRTED', 
    'SLYACQKITQ', 
    'MQCJFLQOZF']

 길이가 N인 문자열에서 길이 M만큼 연속 출력 하기

회문 문제에서 길이가 N인 문자열에서 길이가 M인 문자열인 회문을 찾는 경우가 있다.

이때 N과 M은 같을 수도 있거 N>M인 경우 일 수 도 있다.

N = 10 , M = 5 일 경우 M만큼 연속 출력 하는 경우를 알아보자.

 

N = 10
M = 5
text = 'GOFFAKWFSM'

for i in range(N-M+1):
    sub_text = text[i:i+M]
    print(sub_text)
    
>>> GOFFA
>>> OFFAK
>>> FFAKW
>>> FAKWF
>>> AKWFS
>>> KWFSM

 

항상 문제를 풀면서 for문을 사용할 때 헷갈리는 경우는 얼마만큼 for문을 반복해야 하는지이다.

그리고 슬라이싱을 할때 start와 end를 결정하는 경우 인 것 같다. 

위의 예제에서 항상 리스트는 0 부터 시작하고 마지막 end는 총 길이보다 1만큼 작고 , 슬라이싱 또는 range의 경우에는 마지막은 제외 시키는 것을 생각해야한다.

728x90
728x90

파이썬 (Python)

- 2차원 리스트 만들기

리스트 내포 [ List Comprehension] 을 사용하여 2차원 리스트 만들기

 

# 10 x 10 2차원 배열

# 1차원 리스트

lista = [ i for i range(10)]

>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 2차원 리스트

listb = [lista for _ range(10)]

>>> [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], ...]

listb = [ [ i for i in range(10) ] for _ in range(10)]

>>>[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], ...]

 

- 2차원 리스트 요소 접근

list[j][i]

 

#2차원 리스트 요소 접근 

for i in range(10):
	for j in range(10):
    	data = list[j][i]
        

 

- 2차원 리스트 출력

for y in range(len(listb)):
    for x in range(len(listb)):
        print(listb[y][x],end=' ')
    print('')
    
    
0 1 2 3 4 5 6 7 8 9 
0 1 2 3 4 5 6 7 8 9 
0 1 2 3 4 5 6 7 8 9 
0 1 2 3 4 5 6 7 8 9 
0 1 2 3 4 5 6 7 8 9 
0 1 2 3 4 5 6 7 8 9 
0 1 2 3 4 5 6 7 8 9 
0 1 2 3 4 5 6 7 8 9 
0 1 2 3 4 5 6 7 8 9 
0 1 2 3 4 5 6 7 8 9 

 

- 비트 연산자를 이용한 부분 집합 구하기

list = [1,2,3,4,5]

 

list = ['a','b','c']
n = len(list)
for i in range(1<<n):

    for j in range(n):
        if i & (1<<j):
            print(list[j],end=' ')
    print(' ')


a  
b  
a b  
c  
a c  
b c  
a b c  

- 부분 집합 리스트에 담기 

list = ['a','b','c']
n = len(list)
set_list = []
for i in range(1<<n):
    sub_set_list = []
    for j in range(n):
        if i & (1<<j):
            sub_set_list.append(list[j])
    set_list.append(sub_set_list)
print(set_list)

[[], ['a'], ['b'], ['a', 'b'], ['c'], ['a', 'c'], ['b', 'c'], ['a', 'b', 'c']]

- 4자리 2진수 표현하기

num = 10
m , n = 0,0
result = ''
for i in range(4):
    m =num//2
    n =num%2
    result = str(n) + result
    num = m
print(result)

>>>1010

- 16진수를 2진수 표현하는 문제  

 

conversion = {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'A':10,'B':11,'C':12,'D':13,'E':14,'F':15}
decimal_number = "45DF"
def binary(num):
    m , n = 0,0
    result = ''
    for i in range(4):
        m =num//2
        n =num%2
        result = str(n) + result
        num = m
    return result

final_list = ''
for i in decimal_number:
    result = binary(conversion[i])
    final_list += result
print(final_list)

>>> 0100010111011111

 

- 0 보다 크고 1 미만인 실수인 10 진수 > 2진수로 표현

num = 0.625
result =''
while True:
    next_num = num*2
    result += str(int(next_num))
    num = next_num - int(next_num)
    if num == 0.0:
        break
print('0.'+result)

>>> 0.101

 

728x90
728x90

 웹,Python,JAVA 등 사용하기위한 개발환경을 로컬 환경에 구축해서 사용할때 보통 파이참. Eclipse, 등의 통합 개발환경을 사용하는 경우가 많습니다. VIM이나 Notepad++ 등을 사용하기는 하지만 학습을 하는 입장에서 학원이나 다른 공간의 로컬환경에 구성해놓은 개발환경을 노트북이나 집에 다시 똑같이 구성하는 것은 귀찮은 일이기도 합니다.

 제 나름의 방법으로는 구글 클라우드 플랫폼을 이용하거나 , Colab을 이용하는 방법을 사용하기는 합니다.

그래서 이번에 새롭게 알게된 온라인 통합 개발환경은 구름IDE를 알아보고자 합니다.

 

ide.goorm.io/

 

구름IDE - 설치가 필요없는 통합개발환경 서비스

구름IDE는 언제 어디서나 사용 가능한 클라우드 통합개발환경(Integrated Development Environment IDE)을 제공합니다. 웹브라우저만 있으면 코딩, 디버그, 컴파일, 배포 등 개발에 관련된 모든 작업을 클라�

ide.goorm.io

 온라인 환경에서 개발, 배포등을 할 수 있게 도와주는 구름 IDE는 다른 사용자들과의 공유를 통해 협업도 할 수 있고, Git을 사용한 버전관리 또한 손쉽게 할 수 있습니다.

 C++/C#/Python/Java등 기본적인 프로그래밍 언어들 뿐만 아니라 , 각 환경들이 가지고 있는 몇가지 패키지들을 컨테이너들을 통해서 손쉽게 사용할 수 있다는 장점이 있습니다.

 그럼 회원가입 부터 개발환경 접속 까지 간단하게 알아보도록 하겠습니다.

 

 

- 화면 상단의 회원가입 버튼을 클릭 하여 회원가입 후 로그인을 진행합니다.

 

 

- 회원 가입 후에 로그인을 하게 괴면 새 컨테이너 생성 화면이 보입니다. 클릭해 보도록 합니다.

 

 

  컨테이너 생성 화면 

- 컨테이너 생성화면이 나옵니다.

- 이름을 입력하고 컨테이너를 생성할 지역

- 공개 범위

- Free 계정이라 배포나 GPU는 사용신청을 해야하므로 넘어갑니다.

  소프트웨어 스택 

- 다양한 소프트 웨어 들이 있습니다.

C 부터 Python 뿐만아니라 GO/ Recat / Vue/ Hadoop도 있네요.

Python 기반 웹 서버 패키지로는 Django와 Flask등 있습니다.

우선은 Flask를 선택해 봤습니다.

  OS 운영체제 

- 운영체제를 선택 할 수 있습니다.

- Linux 운영체제인 Ubuntu가 기본적으로 선택되어 있습니다.

- 버전을 선택 할 수 있습니다.

- CentOS나 Window가 없는게 아쉽습니다.

 

- 다 선택 하면 화면 상단의 생성 버튼을 누릅니다.

 

 

- 컨테이너가 생성 되면서 스크립트들이 나타나고 설치가 되는 모습을 볼 수 있습니다.

- 성공적으로 설치가 완료 되면 컨테이너 실행/대시보드로 이동 둘 중에 선택할 수 있습니다. 

- 우선은 대시보드로 이동 해보도록 하겠습니다.

 

 

 

  대시보드 

- 대시보드로 이동하면 지금 사용하고있는 컨테이너가 보입니다.

- 생성된 컨테이너 갯수도 보여 집니다.

- 생성한 TestStudy 컨테이너를 보면 터미널 실행 / Run 항목이 보입니다.

 

 

 

  터미널실행 

- 터미널을 실행해보면 리눅스 환경의 터미널로 진입합니다.

- 리눅스 우분투 명령어를 사용하거나, Flask로 만들어진 서버를 구동시키는데 사용할 수 있습니다.

 

  컨테이너 실행 화면 

- Run 버튼을 클릭하면 컨테이너를 실행하여 통합개발환경으로 진입해 코드를 짤수 있습니다.

- 프로젝트 관리 화면과 코드 화명, 터미널 화면이 보입니다.

- 다음 시간에 코딩을 해보면서 좀더 알아 보도록 하겠습니다.

 

 

 

  마무리 

- 온라인을 통해 이용할 수 있는 통합개발환경을 제공하는 구름 IDE에 대해서 알아봤습니다.

- 온라인으로 이용한다는 점은 어디서나 개발을 할 수 있다는 아주 큰 장점이라고 느꼈습니다.

- 더 많은 OS를 제공하면 어떨까 하는 느낌도 받았습니다.

- 정확한 리소스 제공이나 속도/ 성능 테스트등을 해봐야 하겠지만, 간단한 테스트 환경을이나 웹개발등의 사이드 프로젝트를 진행 해 보면서 더 알바보겠습니다.

728x90
728x90

저번 포스팅에서 BrighticsAI를 시작하고 새로운 프로젝트를 만드는 단계까지 진행해 보았다.

이번 포스팅에서는 듀토리얼 다음 단계로 새로 만든 프로젝트에 데이터를 업로드 해보는 단계를 진행 해보자.

 

듀토리얼은 아래의 단계를 따라서 진행해본다. 

www.brightics.ai/kr/docs/ai/v3.7/tutorials/01_add_localdata?type=insight

 

Brightics Studio

 

www.brightics.ai

위 링크에 접속 해면 맨 하단에 샘플 데이터를 다운로드 받을수 있다. 다운 받아 놓자.

 

그럼 이제 데이터를 업로드 해보도록 하자

 

1. 프로젝트 들어가기

먼저 어제 만들어 놨던 프로젝트의

Workflow에 들어가자.

2. Add Data

다음으로 좌측 Palette 를 클릭

-> Data 탭에서 Add를 선택하자

업로드하려고 하는 데이터가 있는 경로에서 데이터를 가져와야한다.

듀토리얼에서 샘플로 받은 데이터를 업로드 할것이기 때문에 Local을 선택하고, 데이터를 다운로드 받은 경로를 선택해서 데이터를 불러오자.

불러오게 되면 데이터를 데이터가 어떻게 저장 되어 있는지 

Data Preview를 통해서 보여준다. 

Next를 클릭

다음 단계로 진행하자.

다음 단계는 데이터를 어떤 방식으로 Column/Row를 나눌지 Delimiters로 결정하게 되는데

샘플 데이터를 txt파일로 되어 있고, 데이터들은 Tab으로 나누어져 있으므로 Tab을 선택해보자

그러면 위의 그림과 같이 Index / Column /각 Column별 데이터가 알맞게 분리되어 나타나게 된다.

Next를 클릭 다음 단계로 !

다음 단계에서는 각 Column 별 데이터 타입을 설정할수 있다. 

자동으로 데이터 타입이 설정되어 표시 되지만, 필요에 따라서, 부분 또는 전체의 데이터 타입을 변경하여서 사용할 수 있다.

Finish 클릭!

데이터가 성공적으로 업로드 되었다는 알림과 함께 내 계정 하위 upload 폴더에 데이터가 잘 업로드 된것을 볼 수 있다.

 

데이터업로드를 진행 하면서 느꼈던 부분을 간단하게 정리해보고자 한다.

- 가장 좋았던 부분은 데이터 타입을 보기 좋은 형태로 제공 하면서 여기에 처음 설정 또한 편리하게 진행할수 있다는 점이였다. 이런 편리한 UI제공은 큰 장점이 아닌가 생각된다.

- 또한, 업로드한 데이터를 미리보기를 통해 보여 준다는 점이였다.

- 이런 기능이 더해지면 좋겠다고 생각한것은 솔루션을 처음 실행했을때 나오는 팝업창이 Workflow나 다른 Task를 생성하여 들어 갔을때 제일 처음 진행 해야하는 단계나, 단계별 Step에 관한 팝업창이 나왔으면 했다.

- 예를 들어 > 처음 Workflow에 접속 하면 데이터를 업로드 할 것인지 여부를 묻는 팝업창

 

항상 데이터테이블이나 데이터 처리를 진행하면서 UI가 좋은 Tool을 쓰는 것을 좋아하는 편인데, 이런 부분에서 BrighticsAI는 큰 강점을 지니고 있는 것 같다.

728x90

'Brightics AI' 카테고리의 다른 글

[BrighticsAI] Step1 - 듀토리얼  (0) 2020.10.06
[BrighticsAI] 0.시작하기  (0) 2020.10.06
728x90
728x90

+ Recent posts