간단하게 int로 input을 받은 후,

결과값을 17배 시키고,

이를 이진수로 바꾸기 위해서 bin을 하용합니다.

1
2
3
4
5
N = int(input(), 2)
 
result = N * 17
 
print(bin(result)[2:])
cs

 

 

출처: https://www.acmicpc.net/problem/5893

 

5893번: 17배

첫째 줄에 이진수 N이 주어진다. N은 최대 1000자리인 이진수이며, 0이 들어오는 경우는 없다.

www.acmicpc.net

리액트 프로젝트에서 스타일링을 위한 방법의 하나로 styled-components를 사용할 수 있다.

사용하기 위해서는 우선 별도의 설치들이 필요하다.


우선 리액트 프로젝트를 생성한다.

예시로 타입스크립트 형식으로 프로젝트를 생성해보도록 하면 다음과 같다.

$ npx create-react-app fileName --template-typescript


다음 해당 폴더(위의 예시의 경우, fileName)의 경로로 들어간다.

$ cd fileName


이제 본격적으로 설치하는 명령이 필요하다.

다음의 명령어들을 실행하면 styled-components과 Prettier를 설치할 수 있다.

$ npm install --save styled-components

$ npm install --save-dev @types/styled-components jest-styled components

$ npm install --save-dev husky lint-staged prettier


위의 코드를 통해서 이제 설치가 되었을텐데, 다음 작업이 하나 더 필요하다.

Prettier의 설정을 해야하는데, 이를 위해서는 prettierrc.js 파일을 생성하고, 다음과 같이 수정을 해야한다.

module.exports = {
    jsxBracketSameLine: true,
    single Quote: true,
    trailingComma: 'all',
    printWidth: 100,
};

 


이제 package.json파일에 다음의 코드를 추가하여 lint-staged와 husky를 설정해야한다.

"husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
  "lint-staged": {
    "src/**/*.{js,jsx,ts,tsx,json,css,scss,md}": [
      "prettier --write"
    ]
  },

이제 절대 경로로 컴포넌트를 추가하기 위해서 타입스크립터 설정파일인 tsconfig.json을 다음과 같이 수정해야한다.

(원래의 코드에서 빨간색으로 되어있는 부분을 추가시킨 것이다.)

{
  "compilerOptions": {
    "target": "es5",
    "lib": [
      "dom",
      "dom.iterable",
      "esnext"
    ],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noFallthroughCasesInSwitch": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react-jsx",
    "baseUrl": "src"
  },
  "include": [
    "src"
  ]
}

이 다음부터는, 이제 App.tsx파일을 열어서 styled-components를 사용해서 App컴포넌트를 리팩토링하면된다.

 

 

 

내용 출처: 스무디 한 잔 마시며 끝내는 리액트 + TDD

javascript를 대신해서 typescript를 리액트에서 사용할 수 있다.

typescript의 경우, javascript보다는 조금 더 배우기 쉬운(?) 느낌으로 볼 수 있다고 한다.

기본적으로 타입스크립트는 자바스크립트의 슈퍼셋인 오픈소스 프로그래밍 언어이기 때문에 큰 틀에서는 javascript와 비슷하기는 하다.

 


 

1. 일단 typescript를 사용하기 위해서는 npm을 기준으로, 

1
npm install -g typescript
cs

을 통해서 typescript를 사용할 수 있도록 설치가 필요하다.

 


 

이후에 다음과 같이 

1
npx create-react-app todo-list --template=typescript
cs

와 같이 typescript 형식으로 리액트 폴더를 생성하면 된다.

위의 코드에서 todo-list 는 폴더명을 뜻한다.

이런 형태의 설치과정이 나타난다.

 

최종적으로는 다음과 같은 형태로 나오면 설치가 마무리가 된다.

이렇게 해서 

1
npm start
cs

으로 리액트를 실행시키면 다음과 같은 디폴트 리액트 화면이 실행된다.

이런 리액트 화면이 나온다

 

리액트에서 yarn보다는 아직 초반 공부 중인지라, npm이 더 익숙해서 npm을 사용하면서 공부를 했다. 

그런데 yarn을 사용한 폴더를 열어봐야할 일이 있어서 yarn install을 통해서 설치를 했다.

 

 

해당 링크를 통해서 npm을 통한 yarn install이 가능하다: https://classic.yarnpkg.com/en/docs/install/#windows-stable

 

Yarn

Fast, reliable, and secure dependency management.

classic.yarnpkg.com

 

root-import라는 폴더를 통해서 설치를 한 후, 잘 실행을 했고, 해당 폴더를 삭제했다.

 


 

문제는 해당 폴더를 삭제 후, npm으로 돌리고 싶은데, 해당 폴더를 npx create-react-app root-import --template=typescript 로 생성을 하면, 계속 yarn.lock이 생기면서 yarn형태로 생겼다.

원하던 파일은 yarn.lock이 아니라 package-lock 이었는데, 그저 삭제로는 안 되는 거였다.

 

계속 고민을 하고 인터넷을 찾던 중에, yarn uninstall을 하라는 글을 찾았었다.

해당 stackoverflow의 링크에도 꽤 많은 사람들의 질문과 대답이 존재한다. 

일단 중요한 부분은 npm을 통해서 uninstall하는 방법은 npm uninstall -g yarn으로 하는 것이다.

https://stackoverflow.com/questions/42334978/how-do-i-uninstall-yarn

 

How Do I Uninstall Yarn

How can I uninstall yarn? I've used it for a react-native project and now whenever I move the code out of index.ios.js or index.android.js it throws an error so I'd like to just use npm but wheneve...

stackoverflow.com

원했던 package-lock이 있는 형태

 


 

위의 방법으로 yarn의 uninstall은 그런데 경로를 해당 폴더에서만이 아닌 아예 home directory 상태에서 처리를 해야 할 것 같다.

 

사실 uninstall을 했는데도 계속 몇 번 yarn이 생겼던 것 같은데, 어느 순간 yarn이 없어지고 다시 npm의 형태로 쓸 수 있는 package-lock이 나왔다.

그나마 내가 한 여러 방법들 중에 위의 방법이 먹혔기 때문에 이 방법은 정리한다.

 

 

기사 출처: http://www.aitimes.com/news/articleView.html?idxno=140410 

 

국내 AI 상장사, 2분기 매출 성장 흐름 지속...적자 개선은 과제 - AI타임스

국내 인공지능(AI) 주요 상장사의 올해 2분기 성적표가 나왔다. 대부분 기업이 매출 성장을 이뤘지만, 여전히 적자에서 벗어나진 못했다. 신규 고객 유입 등 AI 솔루션의 사용 범위는 넓어지고 있

www.aitimes.com

 


@aitimes 2021년 2분기 주요 AI 업체 실적. (자료=전자공시시스템, 편집=김동원 기자)

 

오늘 2021년 9월 1일의 따끈따끈한 기사로, 국내 인공지능의 올해 2분기 성적표가 나왔다. 

 

최근의 흐름은 계속 AI 분야의 투자 방향으로 이루어지면서, 애플, 구글, 삼성 등의 세계적인 기업들에서도 AI산업체에 발을 담그기 시작하면서 AI에 대한 관심은 계속 집중되고 있다. 또한, 국내에서도 정부의 지원으로 AI 산업은 증가를 하고 있다.

 

하지만, 성적표를 보면, 여전히 거의 모든 기업에서 적자를 벗어나지 못하고 있다. 분명 매출에는 성장이 있다. 다만 영업익을 보면 마이너스(-)에서 벗어나지 못하는 모습을 볼 수 있다. 세세하게 기업들에 대한 간단한 성적표 분석은 위의 기사에 자세히 나타나 있다. 

 

이러한 성적표가 나오는 이유에 대해서 분석이 필요할 것이라고 생각된다. 물론, 아직 초기단계이면서, 고객의 확보에 있어서 아직 제대로 확보되지 않은 상태라는 점이 있을 수가 있다. 또한, 회사에 따라서 물품에 대해서 얼마나 사회에 활용가능성이 높은가 혹은 일상생활에 활용이 가능한가에 대한 문제를 볼 수도 있겠다. 아직 AI 기술에 대한 발전은 막 발전이 급속이 올라가고 있는 단계이기 때문에 초기에 대한 투자액에 비해서 이익이 덜할 수밖에 없을 것이라는 분석이 될 수도 있을 것으로 보인다.

 

그래도, 계속 고객 확보가 1분기에 이어서 되고 있으며, 기술 발전에 의한 사용화가 제대로 이루어지면 본격적인 이익을 바라보며 흑자까지 바라볼 수 있지 않을까라는 기대를 가질 수 있을 듯 싶다. 또한, 이미 거대한 흐름은 AI 분야가 주도하고 있는 것으로 보인다. 이미 국내에서만 봐도 국가차원의 지원이 이루어지고 있고, 세계적인 기업들은 AI 분야도 같이 발전을 시키고 있으며, 서점을 가더라도 수많은 AI와 관련한 책들도 찾아볼 수 있다. 이 거대한 흐름은 멈출 수 없는 흐름이기 때문에 적자라는 숫자도 중요하지만, 앞으로 미래에 대한 발전과 개선 방향에 대해서 바라보는 것이 중요할 것이다.

기사 출처: http://www.aitimes.com/news/articleView.html?idxno=139932 

 

삼성전자, AI 분야 규모 있는 M&A 가능성 제기...성장 동력으로 판단 - AI타임스

삼성전자가 인공지능(AI) 분야에 규모 있는 인수합병(M&A) 가능성을 제기했다.서병훈 삼성전자 IR담당 부사장은 7월 27일 열린 2분기 실적발표 컨퍼런스콜에서 \"3년 안에 의미 있는 규모 M&A 실현 ...

www.aitimes.com

 


 

 

얼마 전에 애플에서 약 25개의 AI 분야 사업체를 인수했다는 소식을 접했었는데, 이제 드디어 삼성도 4차 산업 혁명의 흐름에 따라 AI산업에 발을 본격적으로 담는 것이 아닌가 싶다.

기사가 약 한 달이 지난 기사이지만, 2021년 8월 2일에 나온 기사에 따르면, 삼성 전자에서 인공지능 분야에 규모가 제법 되는 인수합병의 가능성을 제기했다고 한다.

물론, 아직 가능성일 뿐이고, 확실하게 이야기된 바가 없기는 하다. 다만, 삼성의 대표적인 경쟁사인 애플에서 이미 AI 산업에 뛰어들었고, 구글 또한 AI 산업에 이미 뛰어들었으며, 국내에서도 AI 전문가 양성을 위한 투자가 이루어지고 있는 모습을 보면, 삼성 또한 머지않아 큰 움직임을 보이지 않을까라는 생각이 든다.

 

사실, 삼성전자는 이미 AI 분야에 대해서 많은 투자를 하고 있는 상태이다. 기사에 따르면, 삼성 리서치라는 삼성전자의 자체적인 연구소를 운영하고 있으며, 여기에서는 스마트 임베디드 디바이스로부터 클라우드 기반의 AI 서비스까지 알고리즘들에 대한 연구와 on Device AI tech 또한 개발 중이라고 한다. 추가적으로, 투자액으로만 봐도, 삼성전자는 이미 2013년부터 1조 5000억 원의 규모로 투자가 이루어지고 있다고 한다.

 

다시 한번 생각하지만, 아직은 정부의 지원, 세계의 흐름, 대기업들의 움직임 등으로 봤을 때는 AI에 대한 움직임을 끊임없이 발전을 할 것으로 보인다. 마치 과거의 영어에 대한 관심과 역량에 대한 움직임이 있던 것과 같은 양상을 연상케 한다. 그리고 어느 정도 영어가 모두에게 당연시되는 기초적인 역량이 되었을 때, 다른 분야로 집중투자가 넘어가는 것처럼, 언젠가는 AI 또한 모두에게 당연한 듯한 역량이 될 것이라고 개인적으로 생각하는 바이다. 다만, 이 순간이 오기 전까지 AI의 시장에 먼저 발을 디딤으로써 조금 더 빠르게 앞서 나가는 선구자가 되는 것이 좋지 않을까라는 생각이 든다.


코드가 조금 길고 조잡하긴 하지만....

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import sys
exist = []
cnt = 0
for i in range(8):
    exist.append(sys.stdin.readline())
    if i % 2 == 0:
        j = 0
        for j in range(8):
            if j % 2 == 0:
                if exist[i][j] == 'F':
                    cnt += 1
                    j += 1
    else:
        j = 0
        for j in range(8):
            if j % 2 == 1:
                if exist[i][j] == 'F':
                    cnt += 1
                    j += 1
print(cnt)
 
cs

이런 식으로 나는 일단 첫 번째 try에서 문제를 해결했다.

다만, 시간이 84ms로 조금은 느린 시간대를 가졌다.

당연히, 그럴 수밖에 없는 것은, 이중 for문에 의해서 반복이 여러 번 돌아야 하고, if문도 여러 개 있어서 각각에 대한 조건을 찾는 데 있어서 시간이 걸리기 때문이다.


이를 조금 해결할 수 있는 부분은 다음의 코드처럼 range()의 값에 조건을 주면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
count = 0
for i in range(1,9):
    n = input()
    if i % 2 == 1
        for k in range(0,7,2):
            if n[k] == 'F':
                count += 1
    else:
        for k in range(1,8,2):
            if n[k] == 'F':
                count += 1
print(count)
cs

이렇게 range()에 건너뛰기의 조건을 주게 되면, 별도로 j라는 변수를 만들지 않아도 되며, if 조건문도 줄일 수 있게 된다.

실행시간 또한 68ms 정도로 확 줄어드는 것을 볼 수 있게 된다.

 

 

 

문제 출처: https://www.acmicpc.net/problem/1100

 

1100번: 하얀 칸

체스판은 8*8크기이고, 검정 칸과 하얀 칸이 번갈아가면서 색칠되어 있다. 가장 왼쪽 위칸 (0,0)은 하얀색이다. 체스판의 상태가 주어졌을 때, 하얀 칸 위에 말이 몇 개 있는지 출력하는 프로그램

www.acmicpc.net

https://www.youtube.com/watch?v=tF4DML7FIWk 

Atlas | Partners in Parkour  @Boston Dynamics

 

보고도 믿기지 않는 로봇들의 발전의 극한을 보여준 느낌이다.

 

로봇에 대해서 잘 알지 못하지만, 계단을 걷는 것조차 엄청난 기술이 들어간다는 것만은 안다.

하지만, 위의 영상에서는 일반인도 하지 못하는 파쿠르(Parkour: 야마카시의 멤버 다비드 벨에 의해 창시된 이동기술로서, 지형지물 및 사물들을 효율적으로 이용하여 이동하는 방법)를 로봇들이 하기 시작했다.

 

 

위의 로봇들의 움직임을 보면, 앞으로 AI의 발전이 조금만 더 있다면, 소방관과 같은 직업들에 대해서 현재는 사람들이 행하는 역할을 언젠가는 로봇들이 넘보는 시대가 오지 않을까라는 생각도 들게 된다. 

@LATimes HSI - What role will robots play in the future?

 

기사 출처: http://www.aitimes.com/news/articleView.html?idxno=139878 

 

데이터 라벨러 10명 중 4명 "부업 아닌 본업"…비대면 시대 새로운 직업군으로 주목 - AI타임스

#1 A씨는 최근 3년째 다니던 회사를 그만뒀다. AI 학습용 데이터의 완성도를 높이는 데이터 라벨러 활동 시간을 늘리기 위해서다. 1년 전 우연한 기회로 시작하게 된 라벨링이 이제는 부업에서 전

www.aitimes.com

 

 


 

@Nitish Singla

Ai타임스의 기사들을 읽던 중 약 한 달 전에 유형동 기자님이 올린 글을 보게 되었다.

"데이터 라벨러 10명 중 4명 "부업 아닌 본업"…비대면 시대 새로운 직업군으로 주목" 이라는 제목은 확연히 눈을 끌었다. 

데이터 라벨러라는 직업에 대해서 사실 그동안 별로 생각이 없었다. 그런데 이 기사의 제목을 보고 생각해보니 결국 데이터 처리를 하기 위해서는 결국 데이터를 라벨링 하는 작업이 사람의 손에서 이루어져야 한다는 사실을 알게 되었다.

당연히 이러한 일을 AI 개발자들이 할 것이라 생각했으나, 생각해보니 이러한 노가다 작업을 하는 담당자는 확실히 별도로 있을 것이라는 사실을 간과하였다.

 

기사에 따르면, "다양한 데이터에 인공지능(AI)이 이해할 수 있는 이름을 붙이는 '데이터 라벨러'가 최근 새로운 직업군으로 급부상하고 있다." 고 한다. 원래는 데이터 라벨러를 부업으로 삼으면서 지냈던 사람들이 점점 전문 라벨러의 몸값이 높아지면서 부업이 아닌 본업으로 삼고 있다는 것이다.

 

AI 관련 시장이 성장을 하면서 자연스럽게 데이터 라벨링의 시장이 급격히 성장으로 하며, 데이터 가공업체도 늘어나고 있다. 기사에서는 한국데이터산업진흥원에서 2025년 약 4조 3,100억 원 규모를 형성할 것으로 전망했다고 한다. 

 

생각을 해보면 국내에서 급격하게 이렇게 데이터 라벨링의 시장의 성장세에 속도가 붙는 이유는 국가차원으로 현재 AI와 데이터 산업을 추진하고 있기 때문일 것이라고 분석된다. 정부의 "디지털 뉴딜" 정책에 의해서 결국 마이너한 산업과 직업들의 발전이 이루어지고 있다는 것을 의미하며, 새로운 시대의 새로운 직업군의 대표적인 예시로 떠오를 수 있겠다.

 

이러한 기사를 보면 정보가 힘이라는 것이 확실히 느껴진다. 먼저 세상의 흐름과 변화를 읽어내는 사람은 데이터 라벨이라는 영역에 대해서 빠르게 발을 담궜을 수 있기 때문이다. 결국 이렇게 빠르게 변화하는 세상에서, 항상 변화에 깨어있어야 한다는 점을 시사한다.

파이썬 공부를 하면서 백준도 동시에 조금씩 건드리게 되는데, 이때 실행시간에 대해서도 고려를 해야 하는 순간이 온다.

또한, 단순히 문제를 푸는 것에 그치지 않고, 더 효율적인 코드를 위해서 시간을 고려하게 되면 실행시간에 관심을 더 가지게 된다.

 

파이썬의 경우, 다양한 방법으로 실행시간을 확인하고 실행창에서 나타나게 할 수 있다.

 

1. 다양한 IDE는 각각의 유용한 plugin들을 가진다. atom의 경우, hydrogen이나 script, 혹은 atom-python-run 패키지들이 있다. 이 중에 atom-python-run이 실행시간을 나타내 준다.

그리고 pycharm의 professional을 사용할 경우 다음 사진과 같은 부분이 초록색으로 띄면서 실행시간도 같이 보여준다고 한다 (직접 해보지는 못했지만 그러하고 한다...).

아무튼, 다양한 plugin들 중에서 실행시간이 나오는 것을 고르면 된다.

 


 

2. Unix로 된 시스템 혹은 Window에서 git bash로 실행할 경우:  time python ./your_script.py 

사실 이 부분을 추천한다.

real time, use time, sys time이 모두 깔끔하게 표시가 된다.

그리고 백준에서 가끔 시간 초과가 나는 경우, input()을 import sys를 통해 sys.stdin.readline()으로 바꿔서 제출하는 경우가 있는데, 이때 sys time을 보면 된다.

(코드 출처: https://stackoverflow.com/questions/65276859/how-to-add-execution-time-in-atom-terminal)

 

how to add execution time in atom terminal

script output panel doesn't take input from user so I have to use the platformio terminal plugin in atom but it doesn't show the program finished time or execution time, I know, there are some pack...

stackoverflow.com

time python ./your_script.py 

 

 


 

3. 직접 코드에 시간 차이를 계산하도록 하는 코드를 넣어주면 된다.

1
2
3
4
import time
start_time = time.time()
main()
print("--- %s seconds ---" % (time.time() - start_time))
cs

 

(코드 출처: https://stackoverflow.com/questions/1557571/how-do-i-get-time-of-a-python-programs-execution)

 

How do I get time of a Python program's execution?

I have a command line program in Python that takes a while to finish. I want to know the exact time it takes to finish running. I've looked at the timeit module, but it seems it's only for small

stackoverflow.com

+ Recent posts