컴공이나 공학은 학자들의 추상화된 아이디어를 구체화하는거
트랜스포머 2017 논문 2022 구현
개념 찾아내는 것도 어려운데 구현도 어렵다
근데 면접같이 남한테 설명할 땐 복잡한 디테일 버리고 추상적으로 설명하는게 좋다
그런데 그렇게 하려면 구체적인거 복기하면서 해야됨 그래야 추상화된 지식이 오래 남는다
1주 동안 나만무에 쓸 프레임웤 공부 목표
게임 할 사람들은 게임을 이용한 게시판?
시연보다는 취업하는데 도움이 되는 방향 (근데 발표는 못할수도)
발표하는 팀을 추려서 그 팀만 발표
리더의 1픽은 보장해준다
취업에는 코테가 중요하다
OS 못푼거 해보는 것도 좋긴 한데
알고리즘이 더 중요하다
(정글의 모든 과정 중 제일 중요)
유니티, 언리얼, 고도 등 엔진 쓰지 말고
WebGL 포팅한 web rendering framework으로
Q. WebGL을 관심있게 볼까?
일단 게임 하려면 팀원 전부 게임 쪽으로 가려는 사람이어야
5주 동안 유니티나 언리얼로 재밌고 좋은 결과물 -> 가능성이 작다
재밌는 게임을 만들어야 되는데 엔진 쓰면 기획이 더 중요
결과물이 재미가 떨어지더라도 엔진 안 쓰고 만들었으니까 감안해줄 것이라 생각
왜 도움이 되느냐? 신입 개발자는 프로그래밍 실력이 중요
경험보다는 역량이 중요
그럼에도 불구하고 유니티나 언리얼로 해보고 싶으면 끝나고 팀 짜서 해보는게
나중에 혼자나 두명이서 포폴 만들어보셈
Q. 게임은 기술적 챌린지가 뭐가 있을지?
그런 거 생각하지 말고 완성을 목표로
int('0x11',16)
int('011',8)
int('11',10)
1번째 인자에는 숫자 문자열, 2번째 인자에는 진법
str = 'abcabcabc'
index = str.find('b') # index는 1 (2번째 문자)
원하는 문자가 몇 번째에 있는지 찾는 함수
N=int(input())
stack=[]
for i in range(2,N+1):
while N%i == 0:
N=N//i
stack.append(i)
if N==1:
break
for s in stack:
print(s)
if N!=1 and not stack:
print(N)
N==1일 때 조건 놓쳐서 틀림
N==1이 되면 break하는 조건 넣었더니 최적화함
근데 오히려 N==1 조건 넣은게 더 느림
N==1인지 검사하는 연산을 넣어서 그런건가
def prime(n):
if n == 2:
return 2
d = 2
while d*d <= n:
if n%d == 0:
return d
d += 1int(X,rule))
return n
n = int(input())
if n > 1:
while prime(n) != 1:
print(prime(n))
n //= prime(n)
파이썬 중 제일 빠른 코드.
스택에 넣었다가 다시 빼는 과정이 없어서 더 빠른건가?
import sys
input=sys.stdin.readline
N=int(input())
K=input().strip()
s=0
for n in K:
s+=int(n)
print(s)
N하고 K하고 두 개를 안 받고 N만 받아서 했다가 왜 안되지? 이러고 있었다
제정신이 아닌가?
import sys
input=sys.stdin.readline
n=int(input())
word=input()
res=0
temp=''
cnt=0
for i in range(n):
#정수로변환했더니1에서9사이였다면문자열더하기
#문자열더하다가자리수7이상이면히든넘버가아님
#문자열더하다가문자가나오면히든넘버가아님
if '0'<=word[i]<='9':
temp+=word[i]
cnt+=1
if cnt>=7:
temp=''
elif temp:
res+=int(temp)
temp=''
cnt=0
if temp:
res+=int(temp)
print(res)
'1'<=word[i]<='9'
으로 했었다.
'0'을 빼먹었었음.
import sys
input=sys.stdin.readline
n=input()
strr=input()
for i in range(0, 26):
chrr1=chr(i+65)
strr=strr.replace(chrr1, ' ')
chrr2=chr(i+97)
strr=strr.replace(chrr2, ' ')
print(sum(map(int, strr.split())))
백준 제일 빠른 풀이
chr(i + 65): ASCII 코드 65부터 90까지의 값은 대문자 A부터 Z까지를 나타냅니다. 따라서 i에 65를 더하여 대문자를 생성하고, 문자열에서 그 문자를 모두 공백(' ')으로 대체합니다.
chr(i + 97): 마찬가지로 97부터 122까지는 소문자 a부터 z를 나타내므로, 소문자도 모두 공백으로 대체합니다.
이거 여러번 순회해야돼서 느리지 않음? 왜 이게 제일 빠른 풀이지
Python은 여러 내장 함수들이 C 언어로 구현되어 있어, 예상보다 성능이 우수할 수 있습니다. 특히 replace(), split(), map() 같은 함수들은 모두 C 레벨에서 최적화된 함수들이므로 효율적으로 작동합니다.
class Solution(object):
def isPerfectSquare(self, num):
"""
:type num: int
:rtype: bool
"""
i=1
while i*i<=num:
if i*i==num:
return True
i+=1
return False
무지성으로 일단 통과
import math
class Solution(object):
def isPerfectSquare(self, num):
l=0
r=num
while l<=r:
mid=(l+r)//2
square=mid*mid
if square==num:
return True
elif square<num:
l=mid+1
else:
r=mid-1
return False
"""
:type num: int
:rtype: bool
"""
이게 제일 빠른 풀이라고 함.
아예 이분탐색을 조져버리네
큰 수에서 조건 만족하는 어떤 숫자 탐색
== 이분 탐색
공식처럼 나오면 좋은듯
물론 진짜 코테면 일단 제일 빨리 풀 수 있는걸로 작성한 후에 나중에 바꿔야되겠지만
제일 베스트는 이분 탐색이 노타임으로 나오는거
class Solution:
def fractionToDecimal(self, numerator: int, denominator: int) -> str:
n,d=numerator,denominator
num = str(n/d)
if num[-1]=='0' and num[-2]=='.': # 정수인데요
return(str(n//d))
else: # 정수가 아닌데요
rep = ''
i=1
while num[len(num)-i]!='.': # 소수점까지 찾을건데요
temp=num[len(num)-i:len(num)] # 맨 끝에서 하나씩 늘린건데요
if 0<=len(num)-i-1-len(temp): # 비교할 자리가 있는지 확인할건데요
pre=num[len(num)-i-len(temp):len(num)-i] # 비교할건데요
if pre==temp:
rep=temp
break
i+=1
idx = num.find(rep)
# print(rep,idx)
if rep: # 도돌이표 찾았는데요
answer=''
for i in range(len(num)):
if i == idx:
answer+='('+rep+')'
break
answer+=num[i]
return answer
else:
return num
열심히 머리 굴리며 어떻게든 테케 통과시켰는데
맙소사 그냥 나눗셈 때려버린 결과 이용하면 안됐구나
아예 로직을 전면 재검토해야됨
재검토까진 아니고 str(n/d) 부분을 수동으로 만들어주면 될듯?
일단 오늘은 여기까지
import sys
input = sys.stdin.readline
def w(a,b,c):
if a<=0 or b<=0 or c<=0:
return 1
elif dp[a][b][c] != None:
return dp[a][b][c]
elif a>20 or b>20 or c>20:
dp[a][b][c] = w(20,20,20)
elif a<b and b<c:
dp[a][b][c] = w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c)
else:
dp[a][b][c] = w(a-1, b, c) + w(a-1, b-1, c) + w(a-1, b, c-1) - w(a-1, b-1, c-1)
return dp[a][b][c]
dp=[[[None for _ in range(51)]for _ in range(51)] for _ in range(51)]
a,b,c=map(int,input().split())
while (a,b,c) != (-1,-1,-1):
print('w('+str(a)+', '+str(b)+', '+str(c)+') =',w(a,b,c))
a,b,c=map(int,input().strip().split())
# a,b,c가 0보다 작거나 같으면 1을 return
# a,b,c가 20 초과이면 w(20,20,20) return
# a<b<c이면 w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c) return
# 전부 다 아니라면 w(a-1, b, c) + w(a-1, b-1, c) + w(a-1, b, c-1) - w(a-1, b-1, c-1)
전혀 신나지 않았다.
if a<=0 or b<=0 or c<=0:
return 1
elif dp[a][b][c] != None:
return dp[a][b][c]
a<=0 or b<=0 or c<=0:
일땐 dp 값을 오염시키지 않기 위해 dp 안 건드리고 바로 1 return 했어야 했고,
if문의 순서도 맨 앞에 둬야 했다.
질문 게시판 보고 음수 인덱스에 대한 힌트 얻음.
아오 왜 안되나 했네.