PythonCodeFight_Day1

Day_1

https://app.codesignal.com/arcade

Intro.

Q1. add

Write a function that returns the sum of two numbers.

1
2
def add(param1, param2):
return param1 + param2

Q2. centuryFromYear

Given a year, return the century it is in. The first century spans from the year 1 up to and including the year 100, the second - from the year 101 up to and including the year 200, etc.

1
2
3
4
5
6
def centuryFromYear(year):
if year % 100 == 0:
century = int(year / 100)
else:
century = int(year / 100) + 1
return century

Q3. checkPalindrome

Given the string, check if it is a palindrome.

  • palindrome: 앞으로 읽어도, 뒤로 읽어도 같은 문자열

    1
    2
    3
    4
    5
    6
    def checkPalindrome(inputString):
    return (inputString == inputString[::-1])

    # string을 뒤집는 방법
    # s = 'abc'
    # s[::-1] = 'cba'

Q4. adjacentElementsProduct

Given an array of integers, find the pair of adjacent elements that has the largest product and return that product.

1
2
3
4
5
6
7
8
9
def adjacentElementsProduct(inputArray):
arrFront = inputArray[:-1]
arrRear = inputArray[1:]

arrMul = list()
for i in range(len(arrFront)):
arrMul.append(arrFront[i]*arrRear[i])

return max(arrMul)

Q5. shapeArea

Below we will define an n-interesting polygon. Your task is to find the area of a polygon for a given n.

A 1-interesting polygon is just a square with a side of length 1. An n-interesting polygon is obtained by taking the n - 1-interesting polygon and appending 1-interesting polygons to its rim, side by side. You can see the 1-, 2-, 3- and 4-interesting polygons in the picture below.

1
2
3
4
5
6
7
def shapeArea(n):
area = 0

for i in range(2*n-1,0,-2):
area += i*2

return (area - (2*n-1))

2020.01.03

오늘의 개발

어제 작업하던 것 마저 작성했음. 마무리는 못함

작업한 내용

어제랑 같은 작업을 했는데, 어제 마저 못채운 곡률 처리, 슬로프 처리하는 부분을 작성하다가 끝남! 대청소하느라 시간이 별로 없었다.

공부해야하는 내용

매트랩에서 배열 슬라이싱 하는걸 진짜 너무 많이 해놔서, 관련된 함수를 짜거나 해야할 것 같음. 어떤식으로 짜야할지 고민 좀 해야할 것 같다.
그리고 필요한 함수들을 좀 다 짜야할 것 같다.

예를 들면,
입력으로 배열, 인덱스 시작, 인덱스 끝을 받아서 새롭게 배열 포인터 만들어서 리턴.
배열 포인터는 동적 할당으로 생성하고 메모리 해제시켜주는 부분까지 잘 생각해서!

느낀 점

매트랩이 진짜 프로토타입 개발하기도 좋고, 파이썬이 왜 인기가 많아졌는지 알 수 있는 아주 좋은 기회다. 또 C언어에서 C++로 사람들이 왜 넘어가는지도 알겠다. 이런 불편함을 해소해줄 수 있는 다양한 라이브러리들이 C++에서 개발이 많이 되어있기 때문이다.

그리고 애초에 배열을 핸들링하는 부분에 있어서 C++이 벡터 개념때문에 훨씬 용이하기 때문이다.

그래도 임베디드에서는 C를 쓰는 이유를 모르겠다. 아직 인사이트가 부족한 것 같다. 공부 더 해야지!

2020.01.02

오늘의 개발

Matlab/Simulink으로 짜여진 내비게이션 원본 데이터를 처리하는 부분을 임베디드 시스템에 올리기 위해서 C언어로 작성하는 작업

작업한 내용

내비게이션 CAN 메시지 레이아웃 작업
내비게이션 데이터를 처리하는 Matlab코드의 큰 틀을 C언어로 옮기는 작업

  • SEG, CUR, SLP 처리하는 부분은 시간 관계상 내일이나 토요일부터 다시 진행할 예정

공부한 내용

다양한 변수 선언 방식에 대해서 공부함 (union, typedef 등)
함수에서 구조체를 반환하는 방법에 대해서 공부함

공부해야하는 내용

함수에서 2차원 배열을 반환하는 방법
선언한 2차원 배열의 원소 접근을 쉽게 하는 방법
2차원 배열의 원소를 크기에 따라 정렬하는 방법

느낀 점

오늘 한 일들은 C언어에 대한 감각을 살리는 작업이었다. 짜여진 코딩을 C언어로 옮기면서 C언어 포멧에 대해서 다시 한 번 생각해보고, 자주 쓰는 기능들이 어떤 형식을 가지고 있는지 확인하는 시간이었다.

Matlab에서 제공해주는 함수를 엄청나게 많이 써서 코딩을 했는데, 이런 함수들이 C언어에서는 구현되어있지 않은게 너무 많아서 직접 다 구현을 해야할 것 같다… 이게 제일 큰 난관이다!

특히 배열의 여러 원소를 한번에 처리하는 부분을 Matlab에서는 굉장히 간단하게 할 수 있는데, C에서는 하나하나 해줘야하는 것 같아서 고민이다. 물론 Matlab 함수도 들어가보면 결국 하나씩 다 접근하긴 할테지만 그걸 내가 직접 짜야한다니…

이번 기회에 C 개발 실력도 늘리고 공통적으로 쓸 수 있는 코드를 만들어서 가지고 있으면 나중에 쓸 때에는 바로 가져다 쓰면 되니까 괜찮을 것 같긴 하다.

그리고 생각보다 static으로 선언해줘야하는 배열의 숫자가 많아서 메모리 이슈가 생길 것 같은 불길한 예감이 든다.. 마르코프 체인을 RAM에 올릴 때 RAM 부족 때문에 프로세스가 종료되는 일이 일어날 것 같은 불길한 기분! 이 부분에 대해서 인지하고 있자.