반응형

요즘에는 IT 교육을 해주는 곳이 매우 많아졌다.
온라인, 오프라인 상관없이 양질의 강의를 제공하고 있다.
 
오늘은 비전공자들이 취미로 혹은 취업 목적으로 프로그래밍 공부하기 좋은 사이트를 알아보자.
 

1. 인프런(Inflearn)

https://www.inflearn.com/

인프런 - 라이프타임 커리어 플랫폼

프로그래밍, 인공지능, 데이터, 마케팅, 디자인, 엑셀 실무 등 입문부터 실전까지 업계 최고 선배들에게 배울 수 있는 곳. 우리는 성장 기회의 평등을 추구합니다.

www.inflearn.com

 
 
첫번째는 인프런이다.
인프런은 개발자들이 퇴근하고 잠을 줄여가면서 틈틈히 만든 회사로 알고 있다.
처음에는 유튜브, 개인 블로그 등에 각각 올려져 있었던 좋은 품질의 강의를 한 곳에서 볼 수 있게 해주는 목적으로 만들어졌는데,
높은 퀄리티의 강의를 편리하게 볼 수 있다는 부분에서 사용자들의 반응이 매우 좋았다.
지금은 IT 분야에서 다양한 기술을 가진 실력자들이 자체적으로 인프런을 통해 강의를 만들고 있다.
 
ex)
대표적인 사람으로는 전 배달의 민족 CTO 출신의 김영한님이 계시다.
 
 

2. 프로그래머스(Programmers)

https://programmers.co.kr/

프로그래머스

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

programmers.co.kr

 
 
프로그래머스는 코딩테스트 플랫폼을 서비스하고 있는 회사다.
기업들이 채용 프로세스를 진행할 때 함께 협업하는 회사로 개발자들에게는 잘 알려져 있고,
프로그래머스 school이라는 이름으로 자체적인 강의를 제공한다.
 
경험해보니 매우 높은 품질의 강의를 엄선하여 제공하고 있고, 국비교육 사업도 함께 진행중이므로 국비교육에 관심이 있다면 프로그래머스를 통하여 IT에 입문하며 기본개념을 경험하는 것도 추천한다.
 
+ 프로그래머스는 카카오, 네이버 외에 다양한 굴지의 IT 기업과 함께 제휴를 맺어
코딩테스트를 통해 점수가 높은 사람에게 인턴십 기회를 제공하는 행사도 진행하였다.
 
 
3. 패스트캠퍼스(Fastcampus)
https://fastcampus.co.kr/

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 
 
마지막 세번째는 패스트캠퍼스다. 
오프라인 교육장을 통해 오프라인 교육도 함께 제공하고 있으며, 다들 한번쯤 들어봤을 것이라 생각한다.
 
IT 교육에 있어서는 위 2개의 사이트보다는 오랫동안 온라인 강의를 제공하고 있고,
IT 외에 영상, 엑셀, 워드, 심리, 커뮤니케이션 등 매우 다양한 분야의 강의를 제공하고 있다.
 
그러나 비전공자 입장에서는 위 2개의 사이트보다 어려운 부분이 많이 있어, 입문자로써는 추천하지 않는다.
실력이 쌓이면 듣는 것을 추천한다.
 
+ 기업과 제휴를 맺어, 제휴된 기업의 직장인이 가입 시 다양한 강의를 무료로 들을 수 있기도 하다.
 
 
 
요즘에는 네이버, 우아한형제들, 삼성 등 다양한 기업들이 다양한 교육 행사를 주기적으로 진행한다.
ex) 네이버 - 부스트캠프 / 우아한형제들 - 우아한 스터디, 우아한 테크캠프 / 삼성 - SAFFY 등
 
전공자 4년의 교육과정이 무색할 정도로 매우 높은 퀄리티의 교육을 제공하는 상황에서
전공 및 출신이 실력에 있어서 큰 차이를 가져다주지 않는 시장이 되었다.
 
제일 중요한 것은 성실성 같다.
매일 조금씩이라도 성장하려고 노력하는 작은 습관이 쌓여서 내공이 되고,
더 creative한 프로그래머가 되는 것이 아닐까 생각한다.

반응형
반응형

 

안녕하세요 Henry입니다~

 

오늘은 프로그래머스 Level 2 문제 중에 최댓값과 최솟값이라는 문제를 풀어보았습니다.

 

왠지 프로그래머스 Level 2 문제 중 가장 쉬운 난이도를 가진 문제일 것 같은데요,

 

저는 정렬과 문자열 인덱싱을 사용하여 문제를 풀었습니다.

 

def solution(s: str) -> str:
    sorted_ls = sorted(s.split(' '), key=lambda x: int(x))
    return sorted_ls[0] + ' ' + sorted_ls[-1]

 

아래는 문제 풀이 영상입니다.

https://youtu.be/4IFhPzwipKA

 

반응형
반응형

 

안녕하세요 Henry입니다~

 

오늘은 프로그래머스의 Level 2 문제인 "다음 큰 숫자" 문제를 풀어보았습니다.

 

코딩테스트를 보시면서, 함수를 정의하여 사용하는 방법을 체험해볼 수 있는 좋은 문제라고 생각됩니다.

 

아래는 저의 코드입니다.

def solution(n):
    answer = 0
    target_one_count = get_one_count_from_binary_number(n)
    current_n = n
    while True:
        current_n += 1
        current_one_count = get_one_count_from_binary_number(current_n)
        if current_one_count == target_one_count:
            return current_n
    return answer

def get_one_count_from_binary_number(num: int) -> int:
    return_value: int = 0
    while True:
        num, remainder = divmod(num, 2)
        return_value += remainder
        if num == 0:
            return return_value

 

 

아래는 문제 풀이 영상입니다.

https://youtu.be/jV196NiV1mk

 

반응형
반응형

안녕하세요 Henry입니다!

 

오늘은 if라는 문법을 사용한 풀이를 요구하는 문제를 풀어보았습니다.

if는 일반적으로 분기를 나눌때 우리가 주로 사용하는 문법이죠?

 

코드 보시면서 도움이 되시길 바랍니다ㅎㅎ

 

def solution(num):
    return "Even" if num%2 == 0 else "Odd"

 

아래는 문제 풀이 영상입니다.

https://youtu.be/xLceLn_IDJM

 

- YouTube

 

www.youtube.com

 

반응형
반응형

 

안녕하세요 Henry입니다!

 

오늘은 간단한 사칙연산 중 뺄셈에 대한 풀이를 요구하는 문제를 풀어보았습니다.

 

코드 보시면서 도움이 되시길 바랍니다ㅎㅎ

 

def solution(num1: int, num2: int) -> int:
    return num1 * num2

 

아래는 문제 풀이 영상입니다.

https://youtu.be/YA1ezTHYs0Y

 

반응형
반응형

 

 

안녕하세요 Henry입니다.

 

오늘은 회사 출근하기 전에 일찍 눈을 뜨게 되서

코딩 문제를 한문제 풀어보았습니다.

 

python의 dictionary라는 자료형은 정말 잘 사용하기만 한다면 

좋은 도구가 될 수 있는 것 같습니다.

 

이 문제를 풀 때에도

dictionary의 key, value 구조를 활용하여서 userid의 이름을 관리해주고,

마지막에key값을 통해 value값에 접근하면서 문제를 해결할 수 있었습니다.

 

다른 사람의 풀이를 보니 모두 비슷한 사고 과정으로 접근한 것 같습니다.

일단 userid에 대한 최종 name을 얻기 위해 for문 1번,

그리고 출력 구문을 생성해주기 위해 for문 1번을 돌아야하는 거는 다들 같은 생각을 한 것 같습니다.

 

아래는 저의 코드입니다.

 

def solution(record):
    answer = []
    records = [row.split(' ') for row in record]
    users: Dict[str, str] = {}
    
    for row in records:
        if row[0] == 'Enter':
            users[row[1]] = row[2]
            answer.append([row[1],'님이 들어왔습니다.'])
        elif row[0] == 'Change':
            users[row[1]] = row[2]
        elif row[0] == 'Leave':
            answer.append([row[1],'님이 나갔습니다.'])
        else:
            raise Exception
    
    
    return [users[i[0]]+i[1] for i in answer]

 

감사합니다.

반응형
반응형

 

안녕하세요~~!!ㅎㅎ

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

 

오늘은 프로그래머스의 "신규 아이디 추천" 이라는 문제를 풀어보았습니다!

 

2021 카카오 블라인드 채용 코딩테스트에 출제되었던 문제인데요,

카카오 치고는 쉬운 난이도여서 모두 어려움 없이 푸실 수 있었을 것 같습니다!

 

아래는 제가 문제를 푼 코드입니다.

def solution(new_id):
    import re
    answer = ''
    new_id = new_id.lower() # 1 단계
    new_id = re.sub(r"[^a-z0-9-_.]","",new_id) # 2 단계
    while new_id.replace("..",".") != new_id:
        new_id = new_id.replace("..",".") # 3 단계
    
    # 4 단계
    while len(new_id) > 0 and new_id[0] == ".": 
        new_id = new_id[1:]
    while len(new_id) > 0 and new_id[-1] == ".":
        new_id = new_id[:-1]
    
    # 5 단계
    if new_id == "":
        new_id += "a"
    # 6 단계
    if len(new_id) >= 16:
        new_id = new_id[:15]
        while new_id[-1] == ".":
            new_id = new_id[:-1]
    # 7 단계
    while len(new_id) < 3:
        new_id += new_id[-1]
           
    return new_id

 

문제에서 여러가지 단계를 나열해주고 있는데,

해당 단계들을 코드로만 정확하게 변환해주면 되는 쉬운 문제였습니다.

 

Level 1문제를 이렇게 큰 어려움 없이 풀 수 있는데,

아직 Level 2~3에는 관련 알고리즘 방법들을 빠르게 파악하는 것과,

정확한 알고리즘 원리를 이해하는 것이 선행되어야 할 것 같다는 생각을 하였습니다.

 

아래는 제가 문제를 설명한 영상입니다!

https://youtu.be/WlAGJjrcKkA

 

 

앞으로도 열심히 공부해야겠습니다!ㅎㅎ

다들 화이팅!

반응형
반응형

 

 

안녕하세요

알고리즘을 좋아하는 개발자 Henry입니다!ㅎㅎ

 

최근에 회사를 다니면서 바쁘고 피곤해서 코딩 문제를 못풀었었는데,

다시 조금씩 풀어보려고 키보드를 잡았습니다!

 

오늘은 프로그래머스에서 동적계획법을 사용해서 푸는 문제를 풀어보았습니다.

N으로 표현이라는 문제를 처음 접했을 때,

아래와 같이 풀었습니다.

 

def solution(N, number):
    answer = 0
    li = []
    dynamic(N,N,number, li, 1)
    return min(li) if len(li) != 0 else -1

def dynamic(N, cur, number, li, cnt):
    if cnt > 8:
        return
    if number == cur:
        li.append(cnt)
        return
    dynamic(N, int(str(cur)+str(N)), number, li, cnt+1) # N->N
    dynamic(N, cur+N, number, li, cnt+1) # N -> +
    dynamic(N, cur-N, number, li, cnt+1) # N -> -
    dynamic(N, cur//N, number, li, cnt+1) # N -> // 소수점은 무시하기 때문에
    dynamic(N, cur*N, number, li, cnt+1) # N -> *

 

 

그러나 위의 코드는 정확도 55점을 받았습니다.

 

알고보니 사칙연산에서 곱셈과 나눗셈을 먼저 계산을 해주는 로직이 빠져 있었습니다.

 

동적계획법을 사용해서 문제를 풀지 않아서 발생하는 이유였습니다.

여기서 잠깐!동적 계획법이란??>> 동적 계획법은 문제를 풀 때 하나의 문제를 여러 하위 문제로 나누어 풀고, 그것들을 결합해서 최종 목적에 도달하는 방식의 알고리즘입니다.

 

찾아보니까 아래의 링크에서 자세하게 설명해주고 있습니다.https://velog.io/@chelsea/1-%EB%8F%99%EC%A0%81-%EA%B3%84%ED%9A%8D%EB%B2%95Dynamic-Programming-DP

 

[자료구조와 알고리즘] 동적 계획법(Dynamic Programming, DP)

동적 계획법(Dynamic Programming) - 컴퓨터 공학 스터디 W1 자료구조와 알고리즘 내용에 앞서 학교에서 컴퓨터 공학 이론 스터디를 진행하고 있습니다. 매주 발표하는 내용을 시리즈로 업로드할 예정

velog.io

 

 

사실 동적계획법에 대해서 정확한 개념을 모르고 있었다.

 

큰 문제를 작게 쪼개어 작은 문제들을 풀어나가는 느낌으로만 이해하고 있었는데,위의 글을 통해서 동일한 작은 문제를 한번씩만 계산하는 원리가 숨어있다는 것을 알게 되었다.

 

그러나 바로 코드에 적용하는 것은 쉽지 않았다.그래서 몇번 고민한 결과 결국 구글링의 도움을 받아 아래 사이트와 동일한 방법으로 문제를 풀게 되었다.

 

https://gurumee92.tistory.com/164

 

프로그래머스 문제 풀이 N으로 표현

이 문제는 이시윤 강사님의 프로그래머스 강좌 "파이썬을 무기로, 코딩테스트 광탈을 면하자!"를 보고 정리한 내용입니다. 문제 URL N으로 표현 Contents 문제 지문 파악하기 강사님의 알고리즘 풀

gurumee92.tistory.com

def solution(N, number):
    answer = -1
    if number == N:
        return 1
    
    _li = [set() for i in range(8)]
    for i in range(len(_li)):
        _li[i].add(int(str(N)*(i+1)))
        
    for i in range(1,8):
        for j in range(i):
            for op1 in _li[j]:
                for op2 in _li[i-j-1]:
                    _li[i].add(op1+op2)
                    _li[i].add(op1-op2)
                    _li[i].add(op1*op2)
                    if op2 != 0:
                        _li[i].add(op1//op2)
        if number in _li[i]:
            answer = i+1
            break
    
    return answer

 

 

이번 기회를 통해서 동적계획법에 대해서 조금 더 알게 된 것 같아서 감사했다.

앞으로도 꾸준히 코딩 문제를 풀고 싶고, 알고리즘 공부를 하고 싶다.

 

 

반응형

+ Recent posts