반응형

 

 

 

처음에 봤을 때,

문제를 이해하는데는 그렇게 어렵지 않았다.

 

그냥 약수 구해서 두 값 더해서 *2 해주면 되는데,

그 중 최소값을 찾는 문제구나 라는 생각만 하였고 접근했다.

 

첫 시도했을 때는 아래의 코드와 같다.

그런데 80%의 정확도만 나왔다.

 

그 원인을 살펴보니 큰 수에 대해서는 for문에서 i 가 일일히 +1씩 되면서 진행되는 부분이

성능이 좋지 않음을 알 수 있었다.(Timeout Error 발생ㅜㅜ)

 

그래서 for i in range(2,int(i/2)): 처럼 나누기 2를 해보기도 하고 그랬는데,

역시나 마찬가지였다.

# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")

def solution(N):
    # write your code in Python 3.6
    
    check = N
    max_perimeter = 2*(1+(N))
    
    for i in range(1,N+1):
        
        # 반복되는 값이 가장 최근의 몫의 값보다 커지면 그만
        if i >= check:
            break
        
        # 0으로 나눠지면 약수
        if N%i == 0:
            max_perimeter = min(max_perimeter,2*(i+(N/i)))
            check = N/i
    
    return int(max_perimeter)
    
    pass

 

잠깐 들었던 생각이

이전에 풀었던 Codility 문제 중에 CounterFactors라는 문제에서도 약수를 구하는 문제였는데,

조금 다르게 접근했던 것 같은 기억이 있어서 찾아보았다.

https://datacodingschool.tistory.com/69

 

Codility - CountFactors 문제풀이

나의 코드 시간 복잡도: O(sqrt(N)) or O(N) # you can write to stdout for debugging purposes, e.g. # print("this is a debug message") def solution(N): # write your code in Python 3.6 if N == 1: return..

datacodingschool.tistory.com

 

 

그리고 그 결과 같은 방법으로 For 문을 돌리고 100% 정확도를 얻을 수 있었다.

 

약수를 구하는 문제에는 이제 i*i 라는 방식을 사용해주어야겠다.

 

 

두번째 시도했을 때 코드

# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")

def solution(N):
    # write your code in Python 3.6
    
    max_perimeter = 2*(1+(N))
    number_iter = 1
    
    while number_iter*number_iter < N:
        # 약수이면
        if N/number_iter%1 == 0:
            max_perimeter = min(max_perimeter,2*(number_iter+(N/number_iter)))
            
        number_iter += 1
        
    if number_iter*number_iter == N:
        max_perimeter = min(max_perimeter,4*number_iter)
    
    return int(max_perimeter)
    
    pass
   

 

 

 

이번주 토요일에 이베이 코딩테스트,

다음주 토요일에 LG U+ 코딩테스트가 있는데,

매일 꾸준히 3문제씩 공부해야겠다.

반응형
반응형

 

 

이번에 안랩에서 채용을 한다고 해서

8월 23일인 오늘 마감시간 전에 제출을 했다.

 

보안 솔루션을 상품으로 판매하는 회사답게

자소서에서 보안 관련 신기한 기술이름들을 볼 수 있었다.

 

안랩 자소서의 특별한 점은 

기술 설무지라고 해서,

다양한 기술들을 나열하고 내가 개발할 때 경험했던 기술을 체크하는 항목이 있었다.

 

 

이전에 다른 회사들에서는 볼 수 없었던 항목이여서

참신하기도 했다. 

 

왠지 나중에 면접을 보려고 할 때

면접관들이 질문할 내용들을 위해서 넣어진 것이 아닐까 하는 생각이 든다.

 

그래도 이미 보안 분야에서는 모르는 사람들이 없을 정도로

네임드가 있는 회사이고, 가서 많이 배울 수 있을 거라는 생각이 들어

AI/ML 직군으로 지원했다.

 

 

전체 모집 직군은 아래와 같다.

 

 

 

여러 기업들과 마찬가지로 여러 직군으로 신입사원을 뽑는 것 같다.

 

 

아래를 보면, 지원 자격은 대학 졸업(예정)자이기만 하면 기본적으로 충족하는 것 같다.

 

전체 전형은 아래와 같다.

 

 

10/12(월) 첫 근무 예정이라고 하는데,

나도 성실하게 준비해서, 좋은 결과가 있었으면 좋겠다.

반응형
반응형

 

 

안녕하세요

 

알고리즘을 공부하는 개발자 Henry 입니다.

 

이번 하반기, 코로나 19로 인해 취업 시장이 많이 움츠려졌는데요,

 

그럼에도 불구하고 쏘카에서 채용을 진행한다는 소식을

 

친구를 통해 전해듣고, 저도 지원을 하게 되었어요

 

 

아래의 채용 공고를 통해 설문지를 작성하고

접수하는 방식입니다.

 

https://www.notion.so/d458b6b77a2243fb873d1ac800c321f7

 

쏘카와 함께할 인재를 찾습니다!

쏘카의 미션

www.notion.so

 

그 동안 빅데이터 엔지니어 분야를 선호하며 취업을 준비하였는데요.

 

이번에는 데이터 엔지니어 분야를 채용하지 않아서,

서버 개발자로 지원을 하게 되었습니다.

 

 

구글 독스를 통해서 접수를 했기 때문에,

다음과 같이 Google Forms로부터 접수 완료 메일을 받았습니다.

 

그리고 이틀 뒤 쏘카 채용팀으로부터 서류결과 메일이 왔습니다.

 

결과는!!

 

합격이었습니다! 오예~~~><

 

 

쏘카같은 경우에는 중복 지원이 가능해서

내가 백엔드, 프론트엔드 모두 관심이 있으면 중복으로 지원을 할 수 있습니다.

그러나 코딩테스트에서는 하나만 골라서 진행을 해야하는 것 같았습니다.

 

 

최근 들어서 코딩테스트 준비에 조금 소홀했었지만, 

 

그래도 평소에 알고리즘 공부하는 것을 좋아했기 때문에

 

이틀 뒤 진행할 코딩테스트를 준비하였습니다.

코딩테스트는 프로그래머스에서 진행된다고 하여,

저도 프로그래머스로 코딩테스트를 준비하였습니다.

 

준비 기간 동안 제가 푼 문제는 아래와 같습니다.(강의로 만들어 보았습니다.)

 

https://www.youtube.com/watch?v=eP4oDwN_uQ8&list=PLdfdlCB0Mc8fZm6nK8vQoV3QlY9y6xq84

 

그리고

이틀동안 열심히 공부하고

코딩테스트 날이 밝았습니다!

 

 

전체적으로 문제가 그렇게 어렵지 않는 느낌이었고,

유명한 알고리즘을 사용하는 문제보다는

 

문제에 적합한 방법(플로우)를 정리해서

풀어나가면 되는 정도의 난이도였습니다.

 

저도 다른 코테보다는 비교적 어렵지 않게 풀 수 있었습니다.

 

 

테스트 종료 후 이렇게 바로 글을 남기고 있습니다.

 

요즘에 코로나19로 인해서 전체적으로 힘든 시기에 있지만,

 

힘들때일 수록 내가 달려가던 길을 잠시 멈추고

삶의 방향에 대해서 잠깐 고민해보는 시간을 가져보는 것은 어떤가요?

 

나라와 모두를 위해서 기도하겠습니다.

 

 

코딩테스트 결과는 어떻게 되었을지 저도 궁금하네요!

 

 

반응형
반응형

내일 프로그래머스에서 쏘카 개발자 채용 코딩테스트를 봐야해서

공부하고 있다.

 

근데 level 1은 생각보다 쉬운 것 같다.

 

어려운 알고리즘은 아닌 것 같고

일반적으로 생각할 수 있는 방법으로 잘 풀린다.

 

 

def solution(answers):
    
    supo1 = 0
    supo2 = 0
    supo3 = 0
    
    # 1번 수포자의 변수
    supo1_arr = [1,2,3,4,5]
    
    # 2번 수포자의 변수
    supo2_arr = [2,1,2,3,2,4,2,5]
    
    # 3번 수포자의 변수
    supo3_arr = [3,3,1,1,2,2,4,4,5,5]
    
    for i in range(len(answers)):
        # 1번 수포자의 채점
        if answers[i] == supo1_arr[i%5]:
            supo1 += 1
        
        # 2번 수포자의 채점
        if answers[i] == supo2_arr[i%8]:
            supo2 += 1
        
        # 3번 수포자의 채점
        if answers[i] == supo3_arr[i%10]:
            supo3 += 1
    
    # dict()으로 정렬해서 가장 큰 점수 가져오기
    max_value = {}
    max_value[1] = supo1
    max_value[2] = supo2
    max_value[3] = supo3
    
    # 정렬
    max_value = sorted(max_value.items(), key=f1, reverse=True)
    max_num = max_value[0][1]
    
    # 가장 큰 값과 값이 비슷하면 result 배열에 넣어줌
    result = []
        
    for i,v in max_value:
        if v == max_num:
            result.append(i)
    
    # result 반환
    return result
    
    
def f1(x):
    return x[1]

 

 

 

아래 사이트를 들어가면

어느정도 로직은 비슷한데,

다양한 python 내장 함수를 사용해서 훨씬 간결하게 짠 코드들이 많다.

열심히 노력해야겠다

 

https://programmers.co.kr/learn/courses/30/lessons/42840/solution_groups?language=python3

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

P.S 혹시 코딩테스트를 대비하고 공부하고 싶으신 분들을 위해 강의를 올리고 있습니다.(많은 참여 부탁드립니다~~)

 

https://www.youtube.com/channel/UCYYao-BSPaetw7N2GFFJ-Yw?view_as=subscriber

 

Henry Joo

 

www.youtube.com

 

반응형
반응형

 

 

오늘의 목표

프로그래머스 문제 3문제 정도 풀어보기!

 

프로그래머스 - 완주하지 못한 선수 문제풀이 를 풀어보았다.

 

 

set이라는 자료형을 사용하면 차집합을 낼 수 있기 때문에

결과 = list(set(input1) - set(input2))

* 형태로 풀어주려고 했다가 동명이인일 경우 set에서 하나만 남기고 제거해버리기 때문에

동명이인인 경우를 다시 생각해주었다.

 

다 풀고 나서 알게된 사실은

위의 *동명이인의 경우에는 Counter 자료형을 통해 풀어줄 수 있다고 한다.(Set 대신 Counter 사용)

 

def solution(participant, completion):
    
    # 미완주자가 동명이인이 아닐 경우, 차집합으로 생각하기
    complement = list(set(participant) - set(completion))
    
    if len(complement) != 0:
        return complement[0]
    
    # 동명이인일 경우, 정렬하여 다른 시점에서 반환해주기(미완주자 1명이므로)
    participant = sorted(participant)
    completion = sorted(completion)
    
    for i in range(len(participant)):
        if participant[i] != completion[i]:
            return participant[i]
    
    answer = ''
    return answer

 

나와 같은 방법으로 푸는 사람들도 많이 있었고,

Counter와, zip 이라는 클래스, 명령어를 사용해서 푸는 사람들도 있었다.(하단의 링크 참조)

 

https://programmers.co.kr/learn/courses/30/lessons/42576/solution_groups?language=python3

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

P.S 혹시 코딩테스트 준비가 어려우신 분들은 저의 알고리즘 강의를 참고해주시기 바랍니다!!ㅎㅎ

 

https://www.youtube.com/channel/UCYYao-BSPaetw7N2GFFJ-Yw?view_as=subscriber

 

Henry Joo

 

www.youtube.com

 

반응형
반응형

안녕하세요

제가 최근에 티스토리 블로그를 꾸미는 중이여서

다양한 디자인을 시도해보았는데요

 

특별히 

 

아래 블로그를 너무 깔끔하다고 생각해서

벤치마킹해서 따라해보다가

https://life-with-coding.tistory.com/

나다움

life-with-coding.tistory.com

 

메뉴 대신에 > 카테고리를 사용하신 것 같아서

그 방법을 고민해보았고, 방법을 설명드리도록 하겠습니다.

 

 

1) 메뉴 창이 아닌 카테고리 창 띄우기!

 

1-1. 티스토리 변경화면에서 꾸미기 > 스킨 편집으로 들어갑니다.

 

 

 

 

1-2. HTML 편집 버튼을 클릭합니다.

 

 

 

 

1-3. html을 수정해준다. 

 

Ctrl + F 키를 눌러서 "gnb" 라는 키워드를 검색합니다.

 

그리고 다음과 같이 blog_menu 라고 되어있는 부분을 category_list로 고쳐줍니다.

 

 

 

변경 전

 

 

 

변경 후

 

 

* 대신 티스토리 관리 화면에서 자신만의 카테고리를 만들어주어야 합니다.

 

 

 

 

 

 

2) 분류 전체보기 삭제해준다.(CSS 화면으로 넘어간다.)

 

 

 

 

 

2-1. 동일하게 Ctrl + F 키를 눌러서 "gnb"를 찾아준다.

 

2-2. gnb에 대한 내용이 끝나는 부분에 아래 코드를 붙여준다.

#gnb > ul.tt_category > li a.link_tit{display:none;}

 

그러면 분류 전체보기가 사라진다.

 

 

아래와 같이 어느정도 완성이 된다.

 

 

 

 

이렇게 특정 티스토리를 보면서 벤치마킹해나가다보면

어느정도 예쁜 블로그를 만들어낼 수 있을 것이다.

 

 

출처: 해당 사이트를 참고하여 따라해보았습니다.

https://life-with-coding.tistory.com/

나다움

life-with-coding.tistory.com

 

 

 

반응형
반응형

워크플로우는 아래와 같다.

 

1. 일단 web-mvc 의존성이 있어야 함

 

2. WebController.java 만든다. => 기본적인 RequestMapping 잘 되는지 / 찍어봄

package com.example.demo;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class WebController {
	@RequestMapping("/")
	@ResponseBody
	public String home() {
		return "helloHome";
	}
}

 

3. application.properties에 뷰에 관련된 설정을 추가하자.

spring.mvc.view.prefix: /WEB-INF/jsp/
spring.mvc.view.suffix: .jsp

 

4. build.gradle 파일에 jsp관련된 패키지를 추가한다. (빨간부분 추가)

compile('org.apache.tomcat.embed:tomcat-embed-jasper')
compile('javax.servlet:jstl:1.2')

 

5. WebController.java에 결과페이지를 jsp페이지로 호출하는 맵핑 method를 생성하자

package com.example.demo;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class WebController {
	@RequestMapping("/")
	@ResponseBody
	public String home() {
		return "helloHome";
	}
    
    
	
    /* 여기~~~~~~~ */
	@RequestMapping("/jsp")
	public String jspPage(Model model) {
		model.addAttribute("name", "hello springBoot1234");
		return "hello";
	}
    /* ~~~~~~~~~~ */
    
    
    
}

 

6. 마지막으로 main 폴더 및에 /webapp/WEB-INF/jsp 폴더를 만들고 hello.jsp 파일을 생성한 후 아래와 같이 작성한다. 

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

</head>

<body>

${name }

</body>

</html>

 

7. 다시 스프링부트를 구동시키고 잘 나오는지 확인한다. 

 

## 만약 안된다면,

2가지로 나뉠 수 있는데

 

1. 위의 3번 과정을 추가하고, gradle refresh를 해주지 않으면 적용이 안된 상태일 거다.

 

2. thymeleaf랑 같이 쓰면 경로를 못찾는 문제가 발생한다.

아래 spring.thymeleaf.enabled=false로 적용 해제시켜주면 잘 될 것이다.(안되면 gradle refresh 문제)

 

 

참고: https://cpdev.tistory.com/23 [하루하나]

반응형

'IT' 카테고리의 다른 글

알고리즘 정리 - "완전탐색"  (0) 2020.08.27
티스토리 스킨 꾸미기  (0) 2020.08.21
spring boot 웹사이트 to cloud(ubuntu)  (0) 2020.07.14
flask kill 하는 방법  (0) 2020.05.14
python - flask 웹 서버 구축하기  (0) 2020.05.05
반응형

전체적인 플로우

 

가장 기본코드

 

 

1. 내 로컬 pc에서 spring boot 프로젝트를 만든다(배포 도구는 gradle 3.x 버전 사용)

 

2. git server 에 private으로 저장소에 올린다.

 

3. ncloud에서 인스턴스 하나 내려받는다.(인바운드 규칙 포트 열어줌)

 

4. ssh 접속 도구를 사용하여 인스턴스에 접속한다.

 

5. git 저장소에 있는거 clone

$ git clone {복사한 URL}

 

6. 사용할 패키지 다운로드

$ sudo apt-get update
$ sudo apt-get install mysql-server
$ sudo apt-get install openjdk-8-jdk

 

7. gragle을 사용하여 빌드한다

$ sudo chmod 777 ./gradlew
$ sudo ./gradlew build

(빌드가 되고 나면 root/{프로젝트}/build/libs 안에 .jar파일이 생기게 된다. 위의 경로로 아래의 명령어를 통해서 실행시킬 수 있다.)

 

8. 서버용으로 사용하려면 nohup 명령어를 통해 세션을 유지해줄 수 있다.

$ nohup java -jar ${해당 .jar파일} &

## nohup 종료방법 ##
1. “ps -ef | grep 쉘스크립트파일명” 명령으로 데몬형식으로 실행
2. "kill -9 PID번호“ 명령으로 해당 프로세스 종료

 

 

반응형

'IT' 카테고리의 다른 글

티스토리 스킨 꾸미기  (0) 2020.08.21
spring boot 에서 jsp 화면 띄우기  (2) 2020.07.14
flask kill 하는 방법  (0) 2020.05.14
python - flask 웹 서버 구축하기  (0) 2020.05.05
Jython 사용방법  (0) 2020.05.05

+ Recent posts