http://www.aitimes.com/news/articleView.html?idxno=140387 

 

[칼럼이 있는 AI톡]⑦ 인간과 기계의 결합: 하이브리드(hybrid) 존재, 사이보그 - AI타임스

\"칼럼이 있는 AI톡\"중앙대 인문콘텐츠연구소&AI타임스 공동기획[편집자주] 인공지능(AI)이 우리 일상 생활 속으로 점점 더 가깝게 다가오고 있습니다. 인공지능의 좋은 점과 나쁜 점에 대해서

www.aitimes.com

 

 

위의 기사를 읽으면서 과거에 AI 특강을 들으면서 들었던 생각이 문득 났다.

 

현재 4차 산업 혁명은 디지털 세상과 현실 세계가 서로 영향을 주는 정도의 세상이라면,

4차 산업 혁명 이후에는 과연 어떠한 혁명이 올 것인가.

이에 대해서는 위의 기사의 내용에서 이야기하는 하이브리드가 아닐까라는 생각이 든다.

 

현재는 AR/VR와 같이 가상현실이나 메타버스와 같은 형태를 통해서 디지털 세계로 우리는 들어가고자 한다.

그렇다면 반대가 일어난다는 것은?

디지털 세계 즉, 기계가 현실에 직접적인 간접을 하게 된다면 어떻게 될까?

이 부분이 바로 기계가 인간과 직접적으로 연결되는 형태가 아닐까라는 생각이 든다.

©Cyberpunk 2077 - 1980년대 이후 등장한 과학 소설의 한 장르이며 인간 본성, 기술, 그리고 이 둘이 엮이게 되면서 가까운 미래에 일어날 새로운 아이디어를 표현하는 것을 게임으로 구현하였다.

물론, 지금도 그런 형태는 존재하지만, 더 나아간 형태에 대해서 생각해본다.

SF에나 있을 법한 인공지능이 정말로 하나의 존재, 한 명의 인간과 비슷한 사고를 하게 되거나

데이터 칩을 인간의 뇌에 넣거나 하는 형태의 정말로 상상에나 있을 법한 이야기가 비슷하게나마 구현이 되지 않을까?

https://metaverse.school/

 

Metaverse School – A new dimension of education

Virtual education can be so easy with 3D environments… If you want to use our browser-based web platform for advanced learning, you can simply upload your content, documents or videos into the virtual environment. Various features such as a presenter for

metaverse.school

 

©Metaverse School

 

최근에 AI와 메타버스 관련해서 다양한 관심을 가지고 알아보면서,

그리고 교육과 연결시키면서 비대면 교육의 혁명을 이끌어가기 위해서 노력하는 다양한 사례들을 보면서 가장 대표적인 하나의 사례를 알아보게 되었다.

위의 링크에서는 Metaverse School이라고 하는데, 

여기서는 VR 헤드셋을 통해서 특히 대면수업의 느낌을 살리고자 하였다.

 

물론, 그래픽적인 측면에서는 많이 부족해보인다.

그래픽을 보면 흔히 Steam에서 5000원대의 가격으로 팔만한 게임 퀄리티의 그래픽이라고 생각하면 된다.

다만, 어떻게 교실의 구조를 만들었고,

어떠한 콘텐츠에 따라 방의 구조를 만들었는지,

그리고 어떻게 내용 전달을 학생들에게 잘 전달하기 위해서 환경이 구축되어있는지에 집중을 하는 것이 중요하다고 생각된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# '-'를 기준으로 나눠서 입력 받는다.
equation = input().split('-')
minList = []
print(equation)
# '-'로 나뉜 각 index들의 합을 구해서 리스트로 만든다.
for i in equation:
    # '+'이면 합을 구하면 되므로, 숫자만 있는 리스트로 바꾼 후, sum을 구한다.
    beforeSum = list(map(int, i.split('+')))
    print(beforeSum)
    minList.append(sum(beforeSum))
    # print(beforeSum, minList)
print(minList)
res = minList[0]
for i in minList[1:]:
    res = res - i
print(res)
 
cs

 

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

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다

www.acmicpc.net


다음과 같이 코드를 만들면 된다.

1
2
3
4
5
6
7
8
9
from itertools import combinations
num =  int(input())
nums = []
for i in range(1, num):
    nums.append(i)
# print(nums)
combis = list(combinations(nums, 3))
# print(combis)
print(len(combis))
cs

 

 

이전에 https://gettingtoknowit.tistory.com/129?category=919340 에서 combination 함수를 사용했던 적이 있다.

 

[백준] 2798_블랙잭 파이썬 (combination함수 vs 3중for문)

1번 방법: combination함수 우선 상당히 복잡하게 푼 방법부터 보이자면 다음과 같다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 from itertools import combinations N, M = map(int,..

gettingtoknowit.tistory.com

똑같이 이번 문제에서도 사용하면 된다.

 

그리고 중요한 부분은 언제나 그렇듯 "입력값"을 제대로 아는 것이다.

입력값을 보면 "The input will be the positive integer J (1 ≤ J ≤ 99), which is the jersey number of the goal scorer."라고 되어있다.

즉, goal scorer의 번호를 입력하기 때문에, 4명 중 마지막 4번째 사람의 번호를 입력한다는 뜻이고, 

문제의 조건에 따라 마지막 1명은 항상 고정된 숫자로 만든다면,결국 조합은 3명의 조합의 갯수만 구하면 된다! (그래서 7행을 보면 3만 뽑아서 쓴다)

 

 

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

 

6768번: Don’t pass me the ball!

A CCC soccer game operates under slightly different soccer rules. A goal is only counted if the 4 players, in order, who touched the ball prior to the goal have jersey numbers that are in strictly increasing numeric order with the highest number being the

www.acmicpc.net


등급이 실버III 이라고 되어있긴 하지만, 의외로 간단하게 해결이 가능하다.

다만, 그리디 알고리즘인만큼, 숫자들에 대한 규칙을 잘 찾아내는 것이 좋다고 생각된다.

1
2
3
4
5
6
7
8
= int(input())
line = list(map(int, input().split()))
line.sort() # 가장 큰 수를 가장 마지막으로 보내버리자
total = 0
for i in range(n):
    for j in range(i+1):
        total += line[j]
print(total)
cs

가장 큰 숫자를 가장 뒤로 옮기면서, 정렬시켜서 다음과 같이 덧셈을 처리하는 과정을 찾을 수 있다.

1 = 1
1 + 2 = 3
1 + 2 + 3 = 6
1 + 2 + 3 + 3 = 9
1 + 2 + 3 + 3 + 4 = 13
==> 1 + 3 +  6 + 9 + 13 = 32

이를 코드로만 옮겨서 만들면 끝!

 

 

 

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

 

11399번: ATM

첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)

www.acmicpc.net

 


일단 코드는 다음과 같이 하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
cityNum = int(input())
roads = list(map(int, input().split()))
price = list(map(int, input().split()))
 
minPrice = price[0]  # 주유소 리터당 가격이 가장 작은 것
res = 0
# 마지막 도시(=도착지)의 L는 따질 필요가 없다.(=n-1 도시의 수 만큼 반복)
for i in range(cityNum-1):
    if minPrice <= price[i]:
        res = res + (minPrice * roads[i])
    elif minPrice > price[i]:
        minPrice = price[i]
        res = res + (minPrice * roads[i])
print(res)
cs

 

전략 설명
[예시 그림]
   3      2      1
A ---> B ---> C ---> D
5L     2L     3L     1L

1. 첫 번째 도시에서는 무조건 다음 도시까지의 거리만큼을 주유해야 한다.
따라서, 가장 작은 주유소 리터당 가격(=minPrice)를 첫 번째 도시에서 가지게 된다.
[예시] A도시에서 주유를 하면 무조건 5L 를 3만큼 가야 한다.
따라서, minPrice = 5로 시작해서, res=5L*3이 된다.

2. 다음 도시부터는 도시에서 가지는 리터당 주유소 가격이 가장 작은 값으로 계속 그다음 도시까지의 거리만큼 넣으면 된다.
[예시] B도시에서 주유를 하면 이전도시(A도시)보다 주유소 리터당 가격이 작으므로 (5L > 2L), minPrice = 2L로 바뀌고,
다음 도시(C도시)까지의 거리만큼 이동해서 res = res + (2L * 2) 가 된다.

3. 마지막 도시에 도착할 때까지 2번(minPrice와 res 업데이트) 반복
[예시] C도시에서 B도시의 리터당 주유소 가격이 더 크므로 (2L < 3L), 
더 작은 가격을 가졌던 이전 도시(B도시)에서 C에서 D로 가는 거리만큼 더 넣어야 최소비용이 들어감을 알 수 있다.
따라서, res = res + (2L * 1)이 된다.

최종 값은 (5L*3) + (2L * 2) + (2L * 1) 가 된다.



반성
전략 자체에 대해서 떠오르는데 어려웠다...

 

 

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

 

13305번: 주유소

표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 도시의 개수를 나타내는 정수 N(2 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 인접한 두 도시를 연결하는 도로의 길이가 제일 왼쪽 도로부터 N-1

www.acmicpc.net

바쁜 일상 속에서 잠시의 여유를 느끼며 읽을 수 있는 책인 달러구트 꿈 백화점이다.

다양한 감정들을 복합적으로 일으키는 책으로, 꼭 추천 하고 싶은 책이다...

꼭 추천하는 도서: 달러구트 꿈 백화점

   

    달러구트 꿈 백화점을 처음 접하게 된 것은 서점에서였다. 베스트셀러로 몇 주 동안 있었다는 것을 확인했고, 책의 표지인 삽화에서부터 끌렸다. 하지만 읽어보자고 하면서 미루기만 했지, 직접 읽어보지 못하고 있었다. 그러던 중 독서후기클럽이라는 계기로 인해서 직접 읽을 수 있는 기회가 생겼다. 그리고 나는 2시간 만에 책을 정주행해버렸다.

    이 책은 달러구트씨의 꿈을 파는 백화점에서 페니라는 주인공이 일하게 되면서 일어나는 다양한 사건들을 그린다. 달러구트는 1층부터 5층까지 각 층을 담당하는 직원들과 매니저들이 있다. 그리고 꿈 백화점에서 파는 꿈들은 꿈 제작자들이 제작한다.

    달러구트의 꿈 백화점에는 언제나 꿈을 후불이다. 꿈을 사고, 마음에 들면 그에 따른 값을 지불하는데, 그 값은 사람의 다양한 감정들이다. 연애의 설렘이나 트라우마를 극복함으로써 얻는 자신감자부심등 다양한 감정들을 지불한다.

    초반에는 이런 설정들을 이해하는데 조금 시간이 걸리고 어찌 보면 조금 혼란스러울 수 있다. 하지만 한 번 설정들이 이해가 된 후에는 책에서 눈을 뗄 수가 없다. 에피소드의 형식으로 여러 개의 이야기가 펼쳐진다. 그리고 각 에피소드에서 중심이 되는 감정들은 독자인 나에게도 똑같은 감정을 불러일으킨다.

    꿈을 통해서 삶에 대한 이야기를 펼쳐나가는 이 소설은 너무나 많은 아름다운 구절들이 존재한다. 너무나 많은 구절들 중에서 꼭 남기고 싶은 구절들은 총 5개이다. “예지몽에피소드에서 목적지요? 사람은 최정 목적지만 보고 달리는 자율 주행 자동차 따위가 아니잖아요. 직접 시동을 걸고 액셀을 밟고 가끔 브레이크를 걸면서 살아가는 방법을 터득해야 제 맛이죠.(114p)”라고 말하는 한 시나리오 작가의 말, “‘트라우마 극복을 위한 꿈의 대가로 ‘자심감’ ... ‘자부심이 대량 도착했습니다(148p)”로 지불되는 장면, 항상 꿈의 가치는 손님에게 달려있다고 하셨는데... 직접 알려주는 것보단 손님 스스로 깨닫는 것이 중요하죠. 그런 꿈이 좋은 꿈이에요(p.153)”라고 막심과의 대화에서 깨달은 페니의 말, 여러분들을 가둬두는 것이 공간이든, 시간이든, 저와 같은 신체적 결함이든... 부디 그것에 집중하지 마십시오. 다만 사는 동안 자유롭게 할 수 있는 무언가를 찾는 데만 집중하십시오. 그 과정에서 절벽 끝에 서 있는 것처럼 위태로운 기분이 드는 날도 있을 겁니다... 하지만 절벽을 딛고 날아오르겠다고 마음먹은 순간, 독수리가 되어 훨훨 날아오르는 꿈을 완성할 수 있었죠(216p)“라고 수상소감을 한 한 명의 꿈 제작자, 그리고 자신의 삶을 있는 그대로 받아들이고 만족하는 것.... 행복이 허무하리만치 가까이에 있었다는 걸 깨달을 수 있지(250p)“라고 하는 달러구트의 설명.

    사실 졸업이 바로 앞에 오는데, 주변 친구들은 졸업을 이미 하고 직장까지 잘 잡으면서, 그리고 내가 가지고 있던 꿈에 대해서 불확실해지고 미래에 대해서 고민을 더 하게 되면서 절벽에 있는 심정이 되었다. 그러던 중 이 책에서 나온 꿈 제작자인 킥 슬럼버의 수상소감 장면에서 가장 마음이 떨렸던 것 같다. 킥 슬럼버는 스스로의 신체 결함을 딛고 일어선 모습을 보여준다. 그의 이름에서도 킥 슬럼버(kick slumber = 무기력한 상태를 걷어찬다) 또한 나에게 묘한 감정을 가지게 하였다. 절벽에서 날아오르는 독수리가 되는 것... 누구나 절벽에서 위태로운 감정을 가질 수 있다는 것을 생각을 가지도록 해주었고, 그것을 딛고자 마음을 먹는다면 꿈(dream)을 완성할 수 있다는 것을 말한 것도 내 마음을 움직였다. 달러구트도 아니고, 주인공인 페니도 아닌, 꿈 제작자의 말에서 가장 나는 감동을 받았다.

    이렇게 마음이 움직인 상태에서 곧이어 나오는 이야기는 아직도 나를 울컥하게 만드는 에피소드이다.

    독자인 나에게서 눈물을 흘리게 한 익명의 손님께서 당신에게 보낸 꿈에피소드이다. 이 책의 가장 마지막인 에피소드이자, 감정의 정점을 찍고 책을 마무리하는 아름다운 에피소드라고 생각된다. 특히, 이 에피소드에서 부부의 5살 아이가 꿈 백화점에 와서 부모님에게 꿈을 배달하는 에피소드. 현실에서는 실제로는 병에 의해서 죽은 아이가 부부에게 자신은 괜찮다고, 꼭 웃으면서 살아가 달라는 장면은 지금 후기를 쓰면서도 마음을 찡하게 울리는 이야기이다. 이 에피소드에서 안타까움만이 생기는 감정이 아니다. 죽음에 대해서도 생각을 해보게 한다. 그리고 죽음 이후에 남은 이들에 대해서 생각을 하게 한다. 죽음에 의해서 슬픔만이 존재하는 것이 아닌 따뜻함으로 죽음을 받아들이는... 그런 장면이다. 이 책의 화룡점정을 찍는 에피소드가 아닐까라는 생각이 든다.

    이 책은 꼭 한 번은 읽어봐야 하는 책이라고 생각된다. 내용이 매우 쉽게 술술 읽히며, 설정들 또한 특이하다는 생각이 들고, 드라마나 영화, 웹툰으로도 나오면 좋겠다는 생각이 드는 책이다. 하지만 술술 읽으면서도 중간중간에 마음을 찡하게 울리는 울림을 만들어내는 책이다. 완독 후에는 눈을 지그시 감고 마음속에 울리는 그런 다양한 감정들의 형태를 그려보며 바쁘고 딱딱한 일상에서 잠시나마 좋은 꿈을 하나 꾸는 것과 같은 경험을 할 수 있다고 생각된다.

 

 

도서 구매: http://www.yes24.com/Product/Goods/91065309?OzSrank=2 

 

달러구트 꿈 백화점 - YES24

여기는 잠들어야만 입장할 수 있는 ‘달러구트 꿈 백화점’입니다잠들어야만 입장할 수 있는 독특한 마을. 그곳에 들어온 잠든 손님들에게 가장 인기 있는 곳은, 온갖 꿈을 한데 모아 판매하는

www.yes24.com

 

이전 글(아래 링크 참조)에서 git add, commit, push 하는 방법에 대해서 정리를 했다.

https://gettingtoknowit.tistory.com/133?category=1009886 

 

초보를 위한 git add, commit, push 하기 (Visual Studio Code 사용)

상황 설명을 먼저 하겠다. 다음 링크를 통해서 일단 branch 생성까지 한 상태이다. https://gettingtoknowit.tistory.com/127?category=1009886 초보를 위한 "다른 사람 github repository에 branch 생성 방법" (V..

gettingtoknowit.tistory.com

 

성공적으로 push가 이루어지면, 다음과 같은 사진이 나오게 된다는 것까지 확인할 수 있다.

push가 성공적으로 이루어진 후, github 창 모습

 

위에서 노란 박스에 "Compare & pull request"라는 버튼이 있다.

이 pull request라는 것은 바뀐 branch의 내용을 master에 merge를 하기 전에, 다른 사람들이 확인을 할 수 있도록,

"어떻게 어떻게 바꿨다, 이렇게 바꾼 것을 다른 branch와 합쳐도 되겠냐(merge 시켜도 되겠냐)"로 보면 된다.

 

즉, 팀플을 하는 과정에서 수정한 부분에 대해서 바로 원본을 바꾸기 전에 다른 팀원들의 확인을 통해 검사를 받는 과정이라고 생각해보면 된다.

 

"Compare & pull request"라는 버튼을 누르게 되면 다음의 사진의 창이 뜨게 된다.

여기에 pull request의 제목을 설정하면 되고, comment도 넣어도 된다.

그리고 마무리가 되면, 오른쪽 아래에 있는 "Create pull request"버튼을 누르면 된다.

 

 


"Create pull request"버튼을 누른 후의 모습은 다음과 같이 나타난다.

이렇게 되면 성공적으로 pull request가 이루어진 것이다.

성공적으로 pull request 생성

 

여기서 이러쿵 저러쿵해서 확인 절차가 끝나고, 만약 파일을 합쳐도 된다면, 

왼쪽 아래에 있는 "Merge pull request"버튼을 누르면 된다!

 


 

그럼 처음에는 아래와 같은 한 번 더 merge를 확인하는 창이 뜬다.

이 상태에서 "comfirm merge"버튼을 누르면 merge가 이루어진다.

 


완전히 merged가 되면 다음과 같이 창이 바뀌게 된다.

별표 표시한 부분들이 merge가 되었음을 알려준다.

 

그리고 위의 사진에서 마지막 별표 부분에서 delete branch까지 클릭하면, pull request에서도 closed 상태로 변하게 되면서, 마무리를 지었음을 표시할 수 있다. 

delete branch를 누르면 다음과 같은 상태로 바뀐다.

delete branch가 restore branch로 바뀐다.

 

새로고침을 하면 아래 사진에서 표시한 것처럼, pull request 항목에서 1이 없어졌음을 알 수 있다.

pull request가 closed 되었을 경우

 


 

추가로, pull request를 눌러서 들어가게 되면, 

아래의 사진처럼 1 closed라고 되어있을 것을 볼 수 있다.

pull request가 closed된 숫자만큼 앞의 숫자가 바뀌고,

closed를 누르게 되면 closed가 된 pull request들의 목록이 뜨게 된다.

 

 


 

참고로, merge가 된 branch는 github에서 사라지니, 새로 branch를 생성해야 한다.

branch가 없어졌음을 알 수 있다.

상황 설명을 먼저 하겠다.

다음 링크를 통해서 일단 branch 생성까지 한 상태이다.

https://gettingtoknowit.tistory.com/127?category=1009886 

 

초보를 위한 "다른 사람 github repository에 branch 생성 방법" (Visual Studio Code 사용)

최근 팀프로젝트를 하면서 git과 github를 사용하게 되었는데, 제대로 사용을 하지 못해서 이렇게 정리를 하게 되었다. 일단 상황적으로, 다른 팀원의 github respository에 내가 사용할 branch를 생성하

gettingtoknowit.tistory.com

이제 하고 싶은 것은, visual studio code를 통해서 일부의 코드를 수정하였고,

수정한 코드를 github repository의 내가 만든 branch에 업데이트를 시키고 싶은 것이다.

이러한 결과를 위해서는 add, commit, push라는 과정을 거쳐야 한다.

 


 

1. git branch로 내가 바꾸고 싶은 branch를 가리키고 있는지 확인해본다.

3-4행을 수정하였고, terminal을 통해서 git branch에서 현재의 branch를 확인합니다.

 


 

2. 이제 commit을 하기 전에 올릴 파일들을 stage에 올려야 하는데, 이는 add를 통해서 이루어진다.

git add <파일이름 or 경로>

git add --all

git commit -m "커밋에 대한 메시지"

하나의 파일을 add 할 수도 있고, 모두 한꺼번에 add 할 수도 있다.

또한, commit을 했으면, 그에 대해서 message를 넣을 수 있다.

이때, commit message를 잘못 입력했다면, 
git commit --amend -m "수정할 커밋 메시지" 를 통해서 수정이 가능하다!

제대로 작동되었는지 git log를 활용하여 확인할 수 있다.

이런 과정을 거쳐서 git log를 사용하면 젣로 commit이 되었음을 확인할 수 있다.

 


 

3. 이제 push를 통해서 github의 branch에 직접적으로 변경시키면 된다.

git push origin <github의 수정시킬 branch 이름>

 

git push를 성공적으로 했을 경우 실행창

 

 


 

4. 이제 github에서 제대로 변화가 이루어졌는지 확인을 해보면 된다.

git push를 성공적으로 했을 경우, 아래 사진의 별표친 부분처럼 어느 branch에 push가 되었는지 나타난다.

그리고 해당 branch로 가면, 수정이 이루어진 파일에 대해서 정해놨던 commit msg로 바뀌고, 수정이 이루어졌음을 알 수 있다.

git push를 성공적으로 했을 경우, 별표친 부분처럼 어느 branch에 push가 되었는지 나타난다
push한 branch로 가보면, 수정이 이루어진 파일에 대해서 정해놨던 commit msg로 바뀌고, 수정이 이루어졌음을 알 수 있다.

 

위에 있는 pull request에 대해서는 별도로 간단히 다루도록 하겠다.

가장 기초적인 부분이지만, 오랫동안 리액트를 건드리지 않고, 이제 갓 프로그래밍을 입문했는데 하필 리액트부터 건드린 사람들을 위해서 당황스러운 부분이었던, node-module이 없을 때의 해결방법을 적어본다.

 

우선 이 상황이 발생하게 되는 이유는, 

다른 사람의 코드를 공유받았을 때 (예를 들어 github에서 clone을 했을 때),

node-module의 경우 기본 개발환경을 위한 파일들이기 때문에 건드릴 일이 없으며, 또한 폴더의 크기도 너무 크기 때문에 공유를 하지 않는 것 같다.

따라서, 나머지의 폴더와 파일들을 받게 되는데,

이때 yarn start 혹은 npm start를 하더라도 node-module이 없기 때문에 코드가 실행이 제대로 되지 못한다.

 

node-module이 없이 공유받았다
node-module이 없는 상태에서 yarn start를 할 경우 위와 같은 메시지가 뜬다.

 

 


 

이럴 때에 해결방법은 매우 간단하다.

결국 node-module만 install 해주면 된다.

해당 파일에서 yarn install 혹은 npm install을 해주면 끝!

yarn install 하면 나타나는 화면
yarn install 하고 하고 나서 모습

+ Recent posts