기타2023. 4. 18. 19:49
728x90

유럽의 법규 요구성능인 DDAW와 ADDW에 대한 한글자료가 몇 없는 것 같아 정리해본다.
 
[ DDAW ]
Driver Drowsiness and Attention Warning (DDAW) systems
운전자의 졸음 및 주의력을 모니터링 하고,
졸음 등이 감지되면 시각적, 청각적 방법으로 경고하기 위한 시스템.
 
2022 7월까지 모든 차에 적용되어야됨
 (the aim is for DDAW systems to be mandated on all new vehicles by July 2022)
* 참고영상 : https://youtu.be/Ta7I0OB_RWU

 
[ ADDW ]
Advanced Driver Distraction Warning (ADDW) systems
운전자의 주의력이 분산되지 않도록 감지하는 시스템.
2024년까지 전반적인 이동기기에 적용되어야 함( Advanced Driver Distraction Warning (ADDW) systems, which is required for conventional vehicles by 2024. )

ADDW is defined as a system capable of recognising the driver's level of visual attention to the traffic situation and warning the driver when distracted.
* 참고자료 : https://extranet.idiada.com/iris/-/asset_publisher/1d6ZLmMjPpsF/blog/advanced-driver-distraction-warning-addw-first-report/11719?inheritRedirect=false 
 
 
 
[ 추가자료 ]
1. DDAW와 ADDW의 전반적인 설명
https://www.trl.co.uk/projects/driver-drowsiness-and-attention-warning--ddaw--systems

TRL | Driver Drowsiness and Attention Warning (DDAW) systems

TRL is working alongside the European Commission (EC) to develop critical regulation around Driver Drowsiness and Attention Warning (DDAW) systems – which are designed to monitor drivers’ levels of drowsiness and warn them when it is no longer safe to

www.trl.co.uk




2. EU's General Safety Regulation and Commercial Vehicles
: 전반적인 EU의 규제에 대한 설명을 들을 수 있음 (연도별) 
https://www.youtube.com/watch?v=Y2aDepHU6Gw 

 

반응형
Posted by mminky
알고리즘2023. 2. 21. 23:21
728x90

[ 문제 ]

https://softeer.ai/practice/info.do?idx=1&eid=395 

 

Softeer

연습문제를 담을 Set을 선택해주세요. 취소 확인

softeer.ai

 

 

[ 코드 ]

w,n = map(int,input().split())

jewerly = [list(map(int,input().split())) for _ in range(n)]
#금속무게 Mi, Pi가 들어오면 우선 map(int,input().split())으로 각각 정수로 받음
# -> 정수 Mi, Pi를 리스트로 묶음 ex. [Mi, Pi]
# -> [Mi, Pi]리스트를 n개 만듦 (파이썬 2차원 리스트) //https://mminky.tistory.com/141

jewerly.sort(key=lambda x: x[1],reverse=True)
# 리스트 jewerly를 정렬할거임.
# 이때, 기준x의 형태는 x[1]임. 즉, 가격인 Pi를 기준으로 정렬함.
# [Mi, Pi]에서 'Mi의 인덱스는 [0]', 'Pi의 인덱스는 [1]'이기 때문.
# reverse=True를 통해 오름차순 정렬. //https://mminky.tistory.com/170

sum_price = 0
for mi, pi in jewerly: # 리스트 jewerly에 있는 모든 mi,pi에 대해 수행
    # 지금넣는무게 <= 전체가방무게
    if mi <= w :
        sum_price += mi*pi #해당 item을 해당 price만큼
        w -= mi #item넣고 남은 무게로 w 갱신
    # 지금넣는무게 > 전체가방무게
    else:
        sum_price += w*pi #item넣고 남은 무게인 w를 해당 price만큼
        break #남은가방무게 보다 큰 애들이 나오면 끝

print(sum_price)

 

 

[ 해결 아이디어 ]

우선 이 문제는 몇 번 틀렸었다.. 그래서 코드별로 정리해보는 아이디어 노트!

 

1. 리스트 정렬

jewerly.sort(key=lambda x: x[1],reverse=True)

(오답노트)

처음에는 아래 처럼 딕셔너리를 이용해서 정렬을 했다.

# sort_dic_value = list(sort_dic.keys())
# sort_dic_weight = list(sort_dic.values())

 

하지만 문제는 딕셔너리는 중복이 안 된다.

따라서 [무게, 가치]라고 했을 때, [90, 2] 다음에 [70, 2]가 들어온다면

[90, 2]에 대한 정보는 사라지고 [70, 2]로 갱신되어 버린다.

그래서 값이 틀려진다.

위에 첨부한 코드대로 리스트 정렬을 하자!

 

2. break 

    # 지금넣는무게 > 전체가방무게
    else:
        sum_price += w*pi #item넣고 남은 무게인 w를 해당 price만큼
        break #남은가방무게 보다 큰 애들이 나오면 끝

(오답노트)

처음에는 else에 break를 쓰지 않았다.

그 결과 테스트케이스를 돌려보니 runtime error가 났다.

 

for mi, pi in jewerly: 라는 for문을 이용하게 되면 가방 안에 모든 무게를 다 넣어도

jewerly리스트 내의 모든 [mi,pi]에 대해서 반복문을 실행한다.

그래서 가방무게를 초과해서 계산하기도 한다.

어차피 지금 넣는 무게 > 전체 가방 무게 라면 전체가방 만큼만 쪼개어 넣으면 끝이기 때문에

break를 해줘서 for문을 끝내주자!

 

 

[ 결과 ]

반응형
Posted by mminky
알고리즘2023. 1. 14. 18:10
728x90

[ 문제 ]

https://softeer.ai/practice/info.do?idx=1&eid=362 

 

Softeer

연습문제를 담을 Set을 선택해주세요. 취소 확인

softeer.ai

 

[ 코드 ]

n = int(input())

for i in range(n):
    a,b = map(int,input().split(' '))
    sum = a+b
    print("Case #%d: %d" %(i+1,sum))

 

[ 해결 아이디어 ] - 형식 지정 출력

 

* 문제 발생

처음에는 다음과 같은 코드로 print 했다.

print("Case #",i+1," ",sum)

 

하지만 print( , , )는 각 인자들을 띄어쓰기로 연결한다.

얼핏 보기에는 맞아보였지만 코드를 돌려보니 띄어쓰기가 틀렸다.

(노란색으로 표시한 부분이 print문을 ','를 이용 했을 때 발생하는 띄어쓰기이다.)

 

* 해결

그래서 형식을 지정해서 출력하는 방법으로 다시 시도했다.

이 방법은 따옴표 안에 원하는 형식으로 쓰고 거기에 들어가는 변수를 지정해주는 방법이다.

 

즉, Case #1: 2 이렇게 표현하고 싶다면 print 구문 안에 Case #%d%d 이렇게 적어주면 된다. (%d는 정수를 의미)

그리고 뒤에오는 %에는 순서대로 %d에 넣을 변수를 입력해준다.

 

print("Case #%d%d%(i+1,sum))

 

간단하게 실행 결과를 보여주면 다음과 같다.

i = 0
sum = 2
print("Case #%d: %d" %(i+1,sum))

 

-> 코드 실행 결과

    첫 번째 %d에는 i+1 값인 1이 출력되었다.

    두 번째 %d에는 sum 값인 2가 출력되었다.

 

 

[ 결과 ]

반응형
Posted by mminky
알고리즘2023. 1. 14. 17:56
728x90

[ 문제 ]

https://softeer.ai/practice/info.do?idx=1&eid=1016 

 

Softeer

연습문제를 담을 Set을 선택해주세요. 취소 확인

softeer.ai

 

[ 코드 ]

a,b = map(int, input().split(' '))

if a > b:
    print("A")
elif a < b:
    print("B")
else:
    print("same")

* 파이썬은 if, elif, else 구문이다.

 

[ 결과 ]

반응형
Posted by mminky
알고리즘2023. 1. 14. 17:30
728x90

[ 문제 ]

https://softeer.ai/practice/info.do?idx=1&eid=990 

 

Softeer

연습문제를 담을 Set을 선택해주세요. 취소 확인

softeer.ai

 

[ 코드 ]

sum = 0
for _ in range(5):

    start, finish = input().split(' ')
    start_hour, start_min = map(int,start.split(':'))
    finish_hour, finish_min = map(int,finish.split(':'))

    gap_hour = finish_hour - start_hour
    gap_hour_to_min = gap_hour * 60

    gap_min = finish_min - start_min

    sum += gap_hour_to_min + gap_min

print(sum)

 

[ 해결 아이디어 ]

시작시간과 끝나는 시간을 각각 hour와 min으로 나누었다.

이 때 주의할 점은 map(int, start.split(':')) 을 이용하여 int로 바꿔줘야된다. (계산을 위해)

 

처음에는 gap_min = finish_min - start_min을 해야되는데

09:34 18:27과 finish_min(27)이 start_min(34)보다 작은 경우에는 어떻게 하지 라는 생각을 했다.

하지만 결국 일한 시간을 분으로 나타내는 것이기 때문에 27-34 = -7이 나와도 전체결과에는 문제가 없다.

 

[ 결과 ]

반응형
Posted by mminky
알고리즘2022. 2. 28. 13:29
728x90

[ 문제 ]

https://programmers.co.kr/learn/courses/30/lessons/42746

 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰

programmers.co.kr

 

 

[ 코드 ]

def solution(numbers):
    answer = ''
    
    # numbers를 문자열로 바꿔 str_num에 넣음 (사전값 정렬)
    str_num = []
    str_num = list(map(str,numbers))
    ''' (위와 같은 코드)
    for n in numbers:
        str_num.append(str(n))
    '''
    
    # numbers 원소 1000이하 이므로 x*3 (문자열 3번 반복)
    # ex. 3 vs 30을 333 vs 303030으로. 앞에서 부터 비교하면 303<333
    # 즉, 사전순 오름차순이었으면 3->30임. 하지만 *3하면 30->3
    str_num.sort(key=lambda x: x*3, reverse = True)
    # sort에서 key값을 기준으로 정렬. 이때 lambda함수 이용가능
    
    # 0000을 '0' 으로 출력하기 위해 int -> str로 변경
    answer = str(int(''.join(str_num)))
    return answer

 

* 마지막에 answer = ''.join(str_num) 이렇게만 했더니 딱 하나의 테스트 케이스가 통과되지 않았다.

그래서 검색을 해보니 int로 변경 후 str로 변경해야 한다고 했다.

특히 '0000'의 경우 실제로는 '0'인데 int로 변경하지 않으면 '0000'으로 나온다.

 

* ''.join(str_num)''를 기준으로 str_num의 원소들을 합쳐라는 의미 이다.

여기서는 따옴표 안에 아무 것도 없기에 연속으로 합쳐라는 의미 이다. (ex. 6210)

문자 +을 기준으로 합치고 싶다면 '+'.join(str_num) 이렇게 이용 가능 하다. (ex. 6+2+10)

반응형
Posted by mminky
알고리즘2022. 2. 27. 22:01
728x90

* 정렬은 출제 빈도높고, 평균 점수높다고 한다. (출처 : 프로그래머스)

 

--------------------------------------------------------------------------------------------------------------

 

[ 문제 ]

https://programmers.co.kr/learn/courses/30/lessons/42748

 

코딩테스트 연습 - K번째수

[1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3]

programmers.co.kr

 

[ 코드 ]

def solution(array, commands):
    answer = []
    # com을 읽어온다. ex.[2, 5, 3]
    for com in commands:
        a, b, c = com
        ''' (위와 같은 코드)
        a = com[0]   ex. 2
        b = com[1]   ex. 5
        c = com[2]   ex. 3
        '''
        
        # 리스트 슬라이싱을 [시작:끝] 이렇게 했다면 시작~끝-1까지 담김
        arr = array[a-1:b] #2~5번째임. 인덱스에서는 1~4.
        sort_arr = sorted(arr) # 정렬
        
        # answer리스트에 추가해줌
        answer.append(sort_arr[c-1])
        
        #(참고) 이런 식으로 바로 쓰기도 가능!
        #answer.append(sorted(arr)[c-1])
    return answer

 

 

[ 참고자료 ]

파이썬 리스트 슬라이싱, append 가 헷갈린다면 아래 글이 도움될 것!

https://mminky.tistory.com/121

 

[ Python ] 리스트 추가, 삭제, 슬라이싱

* 리스트 추가 .append() * 리스트 원소 삭제 .pop .remove del * 리스트 슬라이싱 1) 이용방법 이렇게 이용하면 (시작)~(끝-1)까지의 항목들이 담긴다. 리스트명[시작:끝] 이런 리스트가 있다고 가정해보자

mminky.tistory.com

 

반응형
Posted by mminky
알고리즘2022. 2. 27. 21:47
728x90

[ 문제 ]

https://programmers.co.kr/learn/courses/30/lessons/42578

 

코딩테스트 연습 - 위장

 

programmers.co.kr

 

 

[ 코드 ]

def solution(clothes):
    dic={}
    c = 1
    
    # ["yellowhat", "headgear"] 이러한 items를 읽어옴
    for items in clothes:
        if items[1] in dic: # "headgear"가 이미 dic={} 안에 있다면
            dic[items[1]] += 1 # "headgear": +1
        else:               # "headgear"가 처음 나왔다면
            dic[items[1]] = 1  # "headgear" : 1
    
    #print(dic)	 #결과 {'headgear': 2, 'eyewear': 1}
    for v in dic.values(): # 여기서 2, 1을 의미
        c = c* (v+1)  # 안 쓴 경우까지 고려하기 위해 v+1
        # ex. headgear의 경우 "yellowhat", "bluesunglasses", "안 씀" (총 3가지)
        
    #for k, v in dic.items(): #(참고) 이렇게 key,value 이용 가능
    #    print(k," ",v)
    
    return c-1 # 최소 한 개 이상은 입음. 다 안 입는 경우 -1

 

경우의 수를 계산하는 법을 알아야 한다!

 

반응형
Posted by mminky