반응형

전체 글 140

[기획] - 역기획 : 배달의 민족에게 새로운 서비스 제안하기 (추천시스템)

오늘은 신기한 컨텐츠를 가지고 왔습니다. 2022년도 1학기에 진행했던 학교 프로젝트에서(학생들이 만들어가는 수업) 배달의 민족이라는 서비스를 역기획 분석한 적이 있습니다. 역기획이라고 함이 단지 기획의 반대, 즉 분석 그리고 분석일 것이라고 생각하실 수 있지만, 가장 중요한 것은 그 분석을 끝낸 뒤 자신만의 기획을 내놓는 것이라는 팀원들과의 공통된 토론이 있었습니다. 그리고 그 마무리의 종점을 찍기 위해 직접 배달의 민족 서비스에서 새로운 서비스 기능을 기획하는 일을 하였습니다. 아래는 그 발표내용입니다 . *본 게시물은 개인의 창작물로, 도용 및 무단 게시를 금지합니다. 배달이라는 아이콘의 새로 쓴 역사는 단연컨대 배달의 민족입니다. 기획을 해보기에 앞서 우선 ‘배달’이라는 기획 틀 안에서 ‘배민’이..

카테고리 없음 2023.01.14

[minishell] - setenv 함수 구현하기

1. setenv 환경변수를 등록하거나 변경하는 함수이다. - 헤더: stdlib.h - 형태: **int** setenv(**const** **char** *envname, **const** **char** *envval, **int** overwrite) - 인수: **char** *envname 환경 변수 이름 **char** *envval 변수값 **int** overwrite 이미 같은 이름의 변수가 있다면 값을 변경할지의 여부 - 반환: **int** 성공하면 0, 실패하면 -1 설계한 pseudo code는 다음과 같다. 설계한 pseudo code 1. key_finder를 통해 원하는 key를 불러온다. (=이전의 문자열) 2. key를 이용해서 맞는 환경변수의 value를 찾는다. 3...

[linux] - 새로운 명령어 만들기

1. 원리 보통 쉘에 명령어를 입력하면, 쉘은 환경변수에 등록된 경로에서 명령어가 있는지 찾아 그 명령어 프로그램을 실행한다. 이때 경로는 앞에서부터 차례로 탐색한다. 2. $PATH 그러한 환경변수는 $PATH 로, 아래와 같다. (운영체제 혹은 설치 프로그램에 따라 이 내용은 다를 수 있다. ) ':'로 나뉘어진 경로 별로 각 경로에 명령어들이 저장되어있다. 가령 /user/bin/이라는 명령어로 가보면, 이러한 명령들이 잔뜩 들어있다. 3. 나의 명령어 만들기 그런데 신기하게도 나도 쉘 명령어를 만들 수 있다. 그 방법은 다음과 같다. 1. 프로그램을 만들어서 mybin 폴더 안에 넣음. 2. $PATH에 mybin을 추가한다. export PATH=$PWD/mybin:$PATH (export : ..

[minishell] - echo 함수 구현하기

echo -n option 까지 작동하는 함수 구현하기 아래와 같은 경우의 출력예시를 살펴보면, -n 옵션이 있을 때 개행없이 출력한다. 1. 이때 ""안에 있는 경우에는 문자열로 취급하고, -nnnnn 같은 경우 옵션으로 인식한다. 2. 또한, -nnna 같이 옵션이 아닌 문자가 끼어있으면 그냥 문자열로 취급한다. 3. 한번 문자열을 인식하면 그 이후에 적힌 -n 같은 옵션 형식도 모두 문자열로 취급한다. 4. 환경변수로 -n이 등록되어있다면 역시 옵션으로 인식한다. 구현한 코드는 다음과 같다. #include "../inc/minish.h" intft_find_option(char *argv) { inti; intcnt; i = 1; cnt = 0; if (argv[0] != '-') return (..

[minishell] - 환경변수 파싱하기, 재귀함수 이용한 문자열 추출함수 만들기

key = value 라고 지정된 문자열에서 key만을 추출하는 함수를 만드려고 한다. (key = value 에서 value를 찾으려면 ‘=’을 찾은 후 그 이후의 문자열을 복사, 반환하면 된다. ) (존재한다는 가정 하에) 문자열, idx= 0 부터 하나씩 증가시키면서 문자열[idx]를 검사한다. ‘=’를 만나면 그동안 찾은 idx = 문자열 길이 이므로 key_finder(char *key_value, int idx) { if (ret[idx] == '=') { char * ret = (char *)malloc(sizeof(char)*(idx + 1)); ret[idx] = ; return ret; } } 아직 ‘=’를 만나기 전이라면 -재귀적으로 수행, 스택에 쌓인 후 재귀가 종료되기 시작하면(=..

백준 1181번 - 단어 정렬 , c++ sort함수

문제 알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오. 길이가 짧은 것부터 길이가 같으면 사전 순으로 입력 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. 출력 조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다. 1. 문제 해석 c++문법으로 쓰느라 학습하는 느낌이다. 원래 C로 작성했을 때 계속 오류가 났는데 아쉽게도 이유는 모른다. - 문자열 전역변수 char string[20000][51]; 로 설정하면서 - 두 문자열의 위치를 바꿀 때..

백준 2805번: 나무자르기 - 이분탐색

문제 상근이는 나무 M미터가 필요하다. 근처에 나무를 구입할 곳이 모두 망해버렸기 때문에, 정부에 벌목 허가를 요청했다. 정부는 상근이네 집 근처의 나무 한 줄에 대한 벌목 허가를 내주었고, 상근이는 새로 구입한 목재절단기를 이용해서 나무를 구할것이다. 목재절단기는 다음과 같이 동작한다. 먼저, 상근이는 절단기에 높이 H를 지정해야 한다. 높이를 지정하면 톱날이 땅으로부터 H미터 위로 올라간다. 그 다음, 한 줄에 연속해있는 나무를 모두 절단해버린다. 따라서, 높이가 H보다 큰 나무는 H 위의 부분이 잘릴 것이고, 낮은 나무는 잘리지 않을 것이다. 예를 들어, 한 줄에 연속해있는 나무의 높이가 20, 15, 10, 17이라고 하자. 상근이가 높이를 15로 지정했다면, 나무를 자른 뒤의 높이는 15, 15..

데이터의 표현과 컴퓨터 연산2 - 부동소수점의 표현

데이터의 표현과 컴퓨터 연산 3.2. 정수의 표현 컴퓨터의 가장 근본이 되는 기능은 수치의 계산이라고 할 수 있다. 이걸 수행하는 가장 핵심적인 장치가 바로 CPU안에 있는 ALU라고 하는 하드웨어이다. (ALU의 구조) 컴퓨터는 2진수의 체계로 수를 저장하고 표현한다. 모두가 잘 아는 이진수의 체계인데 한번 더 짚고 넘어가자면, 소수점 이하의 이진수는 2^(-1), 2^(-2), ... 를 의미한다. ex) 0.101(2) = 0.5 + 0.125 = 0.625 컴퓨터는 양수 뿐만 아니라 음수도 처리하기 때문에 음수를 표현하는 방법이 필요하다. 이를 수행하는 데에는 여러가지 방법이 있는데, 공통적인 부분은 2진수의 가장 왼쪽 비트가 부호 비트로 사용된다는 점이다. 맨 왼쪽 비트, 즉 최상위 비트는 MS..

[linux 뽀개기] - SHLVL - 환경변수 (env)

[linux 뽀개기] 환경변수란, 터미널에서 실행환경에서 사용 중인 변수이다. export, unset 등과 같은 명령어를 통해서 변경이 가능하며, 오늘은 이중에서 SHLVL에 대해서 알아보고자 한다. 1. SHLVL 터미널 내에 동작 중인 쉘의 깊이, 레벨. 환경변수에 있는 값인데 unset으로 삭제된 경우 예외처리가 까다롭다… 방법: getenv → atoi로 숫자 +1 → itoa → setenv 모든 구간에서 오류처리. 다음은 zsh 명령어를 3번 입력하고 난 후의 결과이다. unset SHLVL 를 입력하면, 환경변수 SHLVL가 사라지는데 env 입력해보면 다시, SHLVL = 1 로 좀 더 하위 위치의 env에 새로 생긴 것이 보인다. 결과 값은 이렇다. 다음 시간에는 환경 변수에 대해 알아..

[linux 뽀개기] - cd 명령어 구현하기

0. cd 명령어란? change directory라는 명령어의 줄임말로, 터미널에서 디렉토리를 오갈 때 사용하는 명령어이다. 1. cd 명령어 형태 총 7가지로 정리했다. cd [ 디렉토리 경로] cd [relative_path] : 상대 경로 cd [absolute_path] : 절대 경로 cd . 현재 디렉토리로 이동 cd .. 한 단계 상위 디렉토리 cd / 최상위 디렉토리로 이동 cd $(변수명) 변수에 저장된 경로로 이동 (파싱 과정에서 $(변수명) 파싱 이후에는 맨 위와 동일하게 처리 되므로 문제 없다) cd cd $(HOME) 사용자 홈 디렉토리로 이동 cd - 이전 경로로 이동 * cd ~ 같은 명령어의 경우, symbolic path라고 해서 절대 경로, 상대 경로 말고 이외의 처리인데..

728x90
728x90