단계별로 풀기 - 기본수학 1 => point.규칙찾기

# 2292 벌집 (브론즈2)

point. 수열 1 + 6 + 12+ 18 .. 6n

n = int(input())
first = 1
room = 1
if n == 1:
    print(1)
else:
    while True:
        first += 6*(room)
        room += 1
        if n <= first:
            print(room)
            break

 

# 1193 분수찾기 (브론즈2)

point. 규칙찾기

X = int(input())
stage, key_X = 1, 1
while key_X + stage <= X:
    key_X += stage
    stage += 1
    #print(stage, key_X)
step = X - key_X
x, y = step + 1, stage - step
if stage % 2 == 0:
    print('{}/{}'.format(x, y))
else:
    print('{}/{}'.format(y, x))

 

# 2869 달팽이는 올라가고 싶다 (브론즈2)

point. 시간초과 안나게 하기, 식 구하기

1) 시간 초과 남(실패)

A, B, V = list(map(int, input().split()))
count = 1
result = 0
while True:
    result += A
    if result >= V:
        break
    else:
        result -= B
        count += 1
print(count)

2) 식 구하기 - 정상에 도달하면 떨어지지 않는다.

a, b, v = list(map(int, input().split()))
v = v-a #정상에 도달하면 안떨어지니까 b빼고
if v % (a-b) == 0: 
    print(v//(a-b) +1) # v-a로 이미 횟수 한번을 셋으니까 +1
else:
    print(v // (a - b) + 2) # & 나누어떨어지지 않아서 +1

 

반응형

'알고리즘 > baekjoon' 카테고리의 다른 글

20210118_코테공부  (0) 2021.01.15
20210115_코테공부  (0) 2021.01.14
20210113_코테공부  (0) 2021.01.13
20210112_코테공부  (0) 2021.01.12
20210111_코테공부  (0) 2021.01.11

단계별풀기 - 문자열

# 1152 단어의 개수 (브론즈2)

s = list(input().split())
print(len(s))

 

# 2908 상수 (브론즈2)

point. arr[::-1] 역순으로 출력하기

A, B = input().split()
A_re = int(A[::-1])
B_re = int(B[::-1])
print(max(A_re,B_re))

 

# 5622 다이얼 (브론즈2)

point. 문자열 위치 알려주기 .index()

dial = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ']
S = input()
time = 0
for j in range(len(S)):
    for i in dial:
        if S[j] in i:
            time += dial.index(i)+3
print(time)

 

# 2941 크로아티아 알파벳 (실버5)

point. 문자열 치환 - 문자열.replace("검색문자", "치환문자")

s = input()
cro = ["c=", "c-", "dz=", "d-", "lj", "nj", 's=', "z="]
count = 0
for i in cro:
    s = s.replace(i, "*")

print(len(s))

 

# 1316 그룹 단어 체커 (실버5)

point. 단어에서 두 글자씩 비교해서 앞 글자가 처음 등장하는 인덱스보다 뒤 글자가 처음 등장하는 인덱스가 더 작으면 뒷 글자는 앞서 이미 등장한 글자가 나온다. 따라서 그룹 단어가 아니다. 

문자열 위치 알려주기 - 문자열.find("검색문자") => 검색문자가 처음 나온 위치 반환, 없으면 -1 반환

result = int(input())
for _ in range(result):
    word = input()
    for i in range(1, len(word)):
        if word.find(word[i-1]) > word.find(word[i]):
            result -= 1
            break
print(result)

 

반응형

'알고리즘 > baekjoon' 카테고리의 다른 글

20210115_코테공부  (0) 2021.01.14
20210114_코테공부  (0) 2021.01.14
20210112_코테공부  (0) 2021.01.12
20210111_코테공부  (0) 2021.01.11
20210107_코테공부  (0) 2021.01.07

# 1021 유기농 배추 (실버2)

point. dfs & dfs로 풀때 최대재귀 한도 설정하기 & 방향벡터 사용

#풀이 1
import sys
sys.setrecursionlimit(10000) # 최대재귀 한도설정

T = int(input()) # 테스트 케이스 갯수
B, ck = [], [] 
dx, dy = [1, 0, -1, 0], [0, 1, 0, -1] # 방향 설정


def dfs(x,y):
    global B, ck
    if ck[x][y] == 1:
        return
    ck[x][y] = 1
    for i in range(4): # 4방향 확인
        xx, yy = x + dx[i], y + dy[i]
        if B[xx][yy] == 0 or ck[xx][yy] == 1:
            continue
        dfs(xx,yy) # 1이고 체크 안되어 있으면 dfs돔


def process():
    global B, ck
    M, N, K = map(int, input().split())
    B = [[0 for i in range(50+2)] for _ in range(50+2)] #배추밭
    ck = [[0 for i in range(50 + 2)] for _ in range(50 + 2)] #체크
    for _ in range(K):
        X, Y = map(int, input().split())
        B[Y+1][X+1] = 1 #배추가 있는곳 1로 변경
    ans = 0
    for i in range(1, N+1):
        for j in range(1, M+1):
            if B[i][j] == 0 or ck[i][j] == 1:
                continue
            dfs(i,j)
            ans +=1
    print(ans)


for _ in range(T):
    process()
# 풀이 2
import sys
sys.setrecursionlimit(100000) # 최대 재귀한도 설정

def dfs(x, y):
    visited[x][y] = True 
    directions = [(-1,0),(1,0),(0,-1),(0,1)] #방향
    for dx, dy in directions:
        nx, ny = x+dx, y+dy
        if nx<0 or nx>=n or ny<0 or ny >=m:
            continue
        if array[nx][ny] and not visited[nx][ny]:
            dfs(nx,ny)

for _ in range(int(input())): # 테스트 케이스 만큼
    m,n,k = map(int, input().split())
    array = [[0]*m for _ in range(n)] # 배추밭
    visited = [[False]*m for _ in range(n)] # 체크 확인용
    for _ in range(k): # 배추가 있는 좌표에 1
        y,x = map(int, input().split())
        array[x][y]=1
    result = 0
    for i in range(n):
        for j in range(m):
            if array[i][j] and not visited[i][j]: #배추가 있는데 방문안한 곳이면
                dfs(i, j)
                result+=1
    print(result)

 

단계별 풀기 - 문자열

#11654 아스키 코드 (브론즈5)

point. 아스키코드 변환 함수 ord()

n = input()
print(ord(n))

 

# 11720 숫자의 합 (브론즈2)

point. 각자리 더하기 - 숫자 문자로 받아서 각 자리수 숫자로 더하기

n = int(input())
n_num = input()
sum = 0
for i in n_num:
    sum += int(i)

print(sum)

 

# 10809 알파벳 찾기 (브론즈2)

point. 문자열 위치 찾기 함수 s.find()

s = input()
result = []
alpa = 'abcdefghijklmnopqrstuvwxyz'
for i in alpa:
    result.append(s.find(i))

for i in result:
    print(i, end=" ")

 

# 2675 문자열 반복 (브론즈2)

point. 문자곱은 반복횟수

tc = int(input())
for i in range(tc):
    R, S = input().split()
    result = ""
    for i in S:
        result += i*int(R)
    print(result)

 

# 1157 단어 공부 (브론즈1)

point. 문자 개수 세기 count() / 문자 위치 index()

s = input()
s_up = s.upper()
apla = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
result = []
for i in apla:
    result.append(s_up.count(i))

if result.count(max(result)) > 1:
    print("?")
else:
    max_index = result.index(max(result))
    print(apla[max_index])
반응형

'알고리즘 > baekjoon' 카테고리의 다른 글

20210115_코테공부  (0) 2021.01.14
20210114_코테공부  (0) 2021.01.14
20210113_코테공부  (0) 2021.01.13
20210111_코테공부  (0) 2021.01.11
20210107_코테공부  (0) 2021.01.07

# 14620 꽃길 (실버2)

N = int(input())
G = [list(map(int, input().split())) for i in range(N)]

# 0*N+0
# 0 ~ N**N -1 까지

ans = 10000
dx, dy = [0, 0, 0, 1, -1], [0, 1, -1, 0, 0] # 정지,위,아래,우,좌


# 꽃 a,b,c에 대한 비용 가능할때 리턴
def ck(list):
    ret = 0 # 최소비용 저장
    flow = [] # 위치 저장
    for flower in list:
        x = flower // N # 숫자로 표현한 좌표를 x,y 좌표로 바꿔줌
        y = flower % N
        if x == 0 or x == N - 1 or y == 0 or y == N - 1: # 꽃이 밖으로 나가면
            return 10000
        for w in range(5): # 5방향 저장
            flow.append((x + dx[w], y + dy[w]))
            ret += G[x + dx[w]][y + dy[w]]

    if len(set(flow)) != 15: # 5*3 =15개가 아니면 겹친거
        return 10000
    return ret

for i in range(N * N): # 3개의 꽃 위치 전수조사하기 (x,y좌표로 생각하지 않고 6*6이면 0~35로 설정)
    for j in range(i + 1, N * N):
        for k in range(j + 1, N * N):
            ans = min(ans, ck([i, j, k])) #최소값 갱신

print(ans)

 

단계별로 풀어보기 - 함수

# 15596 정수 N개의 합 (브론즈2)

def solve(a):
    ans = 0
    for i in range(len(a)):
        ans+=a[i]
    return ans

 

# 4673 셀프 넘버 (브론즈1)

point. 정수 n의 각 자리수 더하기 -> 문자열로 변형후 정수형으로 바꿔 더해준다.

self_num = set(range(1,10001))
generated_num = set()
for i in range(1,10001):
    for j in str(i):
        i+=int(j)
    generated_num.add(i)
self_num = self_num - generated_num
for i in sorted(self_num):
    print(i)

 

# 1065 한수 (실버4)

point. 숫자를 str을 통해 자릿수대로 분리하여 list로 저장

num = int(input())
hansu = 0

for i in range(1,num+1):
    if i<100:
        hansu+=1
    else:
        nums = list(map(int, str(i)))
        if nums[2]-nums[1] == nums[1]-nums[0]:
            hansu+=1
           
print(hansu)
반응형

'알고리즘 > baekjoon' 카테고리의 다른 글

20210115_코테공부  (0) 2021.01.14
20210114_코테공부  (0) 2021.01.14
20210113_코테공부  (0) 2021.01.13
20210112_코테공부  (0) 2021.01.12
20210107_코테공부  (0) 2021.01.07

# 9093 단어 뒤집기 (브론즈 1)

tc = int(input())
for _ in range(tc):
    result = ""
    sentence = list(input().split())
    for i in range(len(sentence)):
        for j in range(len(sentence[i]),0,-1):
            result+=sentence[i][j-1]
        result+=" "
    print(result)

 

# 17413 단어 뒤집기 2 (실버 3)

# point. 조건문 사용하기
# [::-1] 처음부터 끝까지 -1칸 간격으로(역순으로)

s = input()
tmp, result, flag = "", "", False

for i in s:
    if i == '<': # 태크 진입 시 true
        flag = True
        result += tmp[::-1] + "<" # 지금까지 tmp에 저장한 문자열 역순 출력
        tmp = "" # 비워줌
    elif i == '>': # 태그 벗어나면 false
        flag = False 
        result += ">"
    elif i == " ": 
        if flag: # 공백인데 태그 속이면 그냥 더해줌
            result +=" "
        else: # 공백인데 태그 밖이면 그 전까지 역순으로 출력
            result += tmp[::-1] + " "
            tmp = "" #비워줌
    else: # 일분 문자열
        if flag: # 태그 안이면 바로 결과에 더해줌
            result += i
        else: # 태그 밖이면 tmp에 넣고 나중에 역순 출력
            tmp += i
result += tmp[::-1] # 마지막 " " 다음에 나온 문자열 더해줌
print(result)

 

# 16956 늑대와 양 (실버 5) -> 방향벡터 사용해서 풀기

※ 울타리의 최소 개수를 구하는 것이 아니기 때문에 늑대의 상하좌우에 양이 없는지만 확인하면 된다.

R,C = map(int, input().split())
M = [list(input()) for i in range(R)]

dx, dy = [0,1, 0, -1], [1,0,-1,0]
ck = False # 양 찾기

for i in range(R):
    for j in range(C):
        if M[i][j] == "W":
            for w in range(4):
                ii, jj = i+dx[w], j+dy[w]
                if ii<0 or ii == R or jj<0 or jj==C: #에외처리
                    continue
                if M[ii][jj] == "S":
                    ck = True

if ck:
    print(0)
else:
    print(1)
    for i in range(R):
        for j in range(C):
            if M[i][j] not in 'SW':
                M[i][j] = "D"
    for i in M:
        print(''.join(i))

 

단계별로 풀어보기 - 1차원 배열

# 2577 숫자의 개수 (브론즈 2)

A = int(input())
B = int(input())
C = int(input())

num_count = [0,0,0,0,0,0,0,0,0,0]
result = str(A*B*C)
for i in range(len(result)):
    num_count[int(result[i])] +=1

for i in range(len(num_count)):
    print(num_count[i])

 

# 3052 나머지 (브론즈 2)

num_list = []
for i in range(10):
    n = int(input())
    num_list.append(n%42)

print(len(set(num_list)))

 

# 1546 평균 (브론즈 1)

n = int(input())
score = list(map(int, input().split()))
M = max(score)
result = 0
for i in range(n):
    score[i] = score[i]/M*100
    result += score[i]

print(result/n)

 

# 8958 OX퀴즈 (브론즈 2)

tc = int(input())
for i in range(tc):
    ox = input()
    result = 0
    score_plus = 0
    for i in range(len(ox)):
        if ox[i] == 'X': # X가 나오면 점수를 0로 초기화
            score_plus = 0
        else: # o이 연속으로 나오면 +1 추가해서 점수에 반영
            score_plus+=1
            result += score_plus
    print(result)

 

# 4344 평균은 넘겠지 (브론즈 1)

c = int(input())
for i in range(c):
    n_socre = list(map(int, input().split()))
    cnt = 0
    average = sum(n_socre[1:])/n_socre[0]
    for score in n_socre[1:]:
        if average < score:
            cnt+=1
    rate = cnt/n_socre[0]*100
    print(str("%.3f" % round(rate, 3)) + "%")

    # print("{0}%".format(round(rate, 3)))
    # 첫번째 예제가 40.0%로 출력됨 0퍼센트로 떨어지더라도 무조건 소수점 3번째까지 표기하기 위해서 %.3f를 사용해야한다.

 

반응형

'알고리즘 > baekjoon' 카테고리의 다른 글

20210115_코테공부  (0) 2021.01.14
20210114_코테공부  (0) 2021.01.14
20210113_코테공부  (0) 2021.01.13
20210112_코테공부  (0) 2021.01.12
20210111_코테공부  (0) 2021.01.11

Q1. 운영체제란 무엇인가요?

  • 운영체제란 컴퓨터 시스템의 자원과 동작을 관리하는 소프트웨어입니다.
  • 운영체제란 컴퓨터 하드웨어 바로 윗단에 설치되는 소프트웨어를 말합니다.

 

+ 자원이란 무엇인가요?

  • 자원이란 메모리, CPU, 하드디스크, 입출력 장치(키보드, 마우스, 모니터) 등 하드웨어 자원뿐만 아니라 소프트웨어 자원까지를 통칭해서 부릅니다. ( CPU를 효율적으로 관리하는 것이 가장 중요, 하나니까! )

+ 운영체제의 기능을 설명해주세요

  • 컴퓨터 시스템 내의 자원을 효율적으로 관리하고, 사용자에게 편리한 환경을 제공하고, 사용자와 운영체제 자신을 보호하는 역할(보안)을 담당합니다.
  • 프로세스 관리, 메모리(저장장치) 관리, 디스크 관리, CPU스케줄링, 파일관리 등의 기능이 있습니다.

  + PC 운영체제 어떤게 있나요? 윈도우, , 리눅스...

 

  Q2. 1차 저장장치와 2차 저장장치의 차이점을 비교해주세요

  • 1차 저장장치는 주 기억장치로 프로세스에 할당하는 메모리 영역의 할당과 해제를 담당합니다.
  • 2차 저장장치는 HDD(하드디스크), NAND Flash 등으로 파일 형식의 데이터를 저장합니다.

 

+ 주기억장치의 종류는?

  • (ROM : Read Only Memory)과 램(RAM : Random Access Memory)
  • 롬은 읽기 전용으로 비휘발성 메모리이고, 램은 자유롭게 읽고 쓸 수 있으며 전원이 꺼지면 기억된 내용이 모두 사라지는 휘발성 메모리입니다.

 

반응형

'cs지식 > Operating System' 카테고리의 다른 글

[OS] PCB와 Context Switching  (0) 2021.01.20
[OS] 시스템 콜(System Call)  (0) 2021.01.20
[OS] 인터럽트(Interrupt)  (0) 2021.01.15
[OS] 프로세스 주소 공간  (0) 2021.01.14
[OS] 프로세스와 스레드  (0) 2021.01.14

제17회 임베디드 소프트웨어 경진대회 - 자율주행 모형자동차


제17회 임베디드 소프트웨어 경진대회 - 자율주행 모형자동차 결선 참가

기간 : 2019.4.29 - 2019.12.14

 

[About]


 모형자동차를 실제 자동차처럼 주행하며 여러가지 미션을 수행해 완주하는 경기입니다. OpenCV 라이브러리를 사용하였으며 카메라와 거리 센서, 라인 센서를 이용해 미션을 판단하고 조향각을 조정하여 미션을 수행하였습니다.

미션 코스에는 고가도로, 돌발(내리막)구간, 우선정지 장애물 통과, 곡선주행, 자동 주차(수직, 수평), 교차로 주행, 터널구간, 신호등에 의한 차선 선택 주행, 차선변경 등이 있다.

담당역할 : 고가도로, 터널, 우선정지 장애물, 신호등 구간 개발

기여도 : 25% / 5명

 

[개발환경]


Sofware : PC-Linux, target board-embedded linux, ssh

Hardware : PC, a15 Dual Core 탑재한 모형자동차

a15 Dual Core 탑재한 모형자동차

[특이사항]


Pthread를 사용하여 LCD 출력 부분과 영상처리 부분을 나누어 작업했습니다.

 

[성과]


신호등 구간 좌우판별 정확도를 50%에서 90%호 향상시켰습니다.

 

[경기 영상]


 

반응형
반응형

+ Recent posts