안녕하세요. 지금부터는 본격적인 AWS서비스와 함께 우리가 무엇을 구현해야 하는지, 왜 이 서비스를 사용하는지에 대해서 본격적으로 탐구해보도록 하겠습니다. 저희는 소규모 아키텍트를 제작하려고 합니다. 소규모 아키텍트의 확실한 정의가 존재하지는 않지만 대략적으로 1,000명 또는 10,000 이하의 서비스 사용자가 있을 때를 생각하시면 될 것 같습니다. 따라서, 우리는 그 소규모 사람들을 위한 서비스를 어떻게 마련할 것인지, 또한 트래픽을 감당하지 못할 때에는 어떻게 할 것인지에 대한 대비를 해 놓아야 합니다. 예시를 하나 들어보면서 차근차근 시작해보도록 하겠습니다. 조금 어색한 부분들도 있겠지만 감안해서 보시기 바라겠습니다:) 저는 작은 음식점을 하나 운영하고 있습니다. 처음에는 혼자 운영(EC2)을 하..
IAM IAM(Identity and Access Management)이란 자신의 자원이나 자료 등 리소스에 액세스를 부여하여 자원을 안전하게 지킬 수 있도록 도와주는 서비스이다. 조금 더 쉽게 일상 생활에서의 IAM을 이해해보자. 예를 들어보면 이렇다. 회사는 사원증 또는 지문으로 사무실 출입에 대한 인증을 충족할 수 있으며, 해당 권한이 존재하는 사람들에 대해서만 출입할 수 있다. 즉, 회사 내의 자원이나 재산을 지키기 위해서는 인증 및 권한에 대한 액세스가 필요하며, 그 액세스에 대한 부분들을 IAM에서 처리할 수 있도록 도와주는 것이다. 또한 관리자는 회사 출입에 대한 권한을 부여할 수 있으며 직책 및 부서에 따라 다른 출입권한을 부여할 수도 있다. AWS에서 설명하는 IAM은 다음과 같다. AW..
https://programmers.co.kr/learn/courses/30/lessons/42747 코딩테스트 연습 - H-Index H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표 programmers.co.kr H-Index라고 하는 것에 대한 정의가 실제로 존재했다! 위키백과에 말과 프로그래머스를 인용하자면 H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표한 논문 n편 중, ..
숫자 문자열과 영단어 2021 카카오 채용연계형 인턴십 LEVEL 1 문제 'one2three4fivesix' 라는 문구가 주어지면 '123456' 이라는 값을 return하면 된다. 규칙은 간단하다. 즉, 숫자는 숫자 그대로를 출력하고, 문자는 숫자로 변환시켜 출력하면 되는 것이다. 문제를 해결하기 위해 StringBuilder를 하나 선언하여 이후에 한 번에 출력하기 전까지 차곡차곡 쌓을 것이다. 또한, for구문을 통해서 주어진 문자열에 대해 charAt으로 접근하고 알파벳마다의 첫 문자를 기준으로 어떤 문자열인지 알아내는 구조로 진행할 예정이다. 숫자영단어 0 zero 1 one 2 two 3 three 4 four 5 five 6 six 7 seven 8 eight 9 nine 경우의 수는 9가..
로또의 최고 순위와 최저 순위문제 2021 Dev-Matching: 웹 백엔드 개발자(상반기) LEVEL 1 문제이다. 기존의 로또 방식과는 조금 다른 규칙을 가지고 있지만 어느 정도의 틀은 유지하고 있는 것 같다. 하지만 lottos, win_nums의 두 가지 배열을 넘겨주어 내가 가지고 있는 lottos와 실제 우승 숫자인 win_nums와 비교하는 것에서 조금 다른 점은 lottos안에 있는 0이라는 숫자에는 다른 가능성을 심어준다는 것이 있다. 즉, 0이라는 숫자는 누군가에 의해 지워져서 상상에 의해 win_nums에 있는 숫자를 넣을 수도, 아니면 일부로 넣지 않을 수도 있다는 것이다. 만약 모두 지워져서 [0, 0, 0, 0, 0, 0]이라는 숫자가 lottos에 있다면 모든 수를 틀리게 넣..
2019 KAKAO BLIND RECRUITMENT LEVEL 2 오픈채팅방의 문제는 다음과 같이 이해하면 된다. '111', '222'라는 닉네임을 가진 사람이 채팅방에 들어오고 나가는 과정을 예시로 보여주자면 다음과 같다. 111님이 들어왔습니다. 222님이 들어왔습니다. 111님이 나갔습니다. 다만 여기서 '111'이라는 친구가 '333'이라는 닉네임으로 바꾸어서 들어오면 다음과 같이 출력문이 바뀌어야 한다. 333님이 들어왔습니다. 222님이 들어왔습니다. 333님이 나갔습니다. 333님이 들어왔습니다. 이전에 있었던 모든 공지가 '333'이라는 닉네임으로 바뀌어야 하며, 333이라는 닉네임으로 들어왔으니 들어온 공지를 내야한다는 의미이다. 즉 여기에서 알 수 있는 사실들을 몇 가지 뽑아보자. 첫..
2019 KAKAO BLIND RECRUITMENT LEVEL 1 문제를 보면 이해가 어려운 것은 아니지만, 레벨 1 치고 단번에 이해하기 어려워서 문제를 읽는데에 조금 시간을 투자했다. 아무튼 결론은 테스트하고 싶은 스테이지를 알려주고, 현재 사람들의 스테이지 현황을 파악하여 그 단계의 실패율을 구하는 문제이다. stages.length가 곧 사람들의 수를 의미하며, 스테이지가 올라가는대로 해당 스테이지에 관한 인원수가 -1씩 된다. 정리하면 이렇다. 예를 들어 [1, 2, 2, 4, 5] 라는 스테이지가 주어지고(물론 오름차순으로 주어지는 것은 아니다), 구하고자 하는 스테이지가 4스테이지 일 때로 가정해보겠다. 총인원 : 5명 1 스테이지 : [1, 2, 2, 4, 5] - 1명 (총 인원 5명) ..
가장 먼 노드 문제는 노드로 주어지는 상황속에서 1부터 n까지의 관계 안에 가장 먼 노드를 찾는 문제이다. 즉, 위와 같은 모형이 주어지면 가장 먼노드인 5, 4, 6 의 개수 3을 return하면 된다. 우선 깊이 우선 탐색(DFS)와 너비 우선 탐색(BFS) 둘 중 어느 방식을 선택할 것인가에 대해 생각이 필요해보였다. 가장 먼 노드를 따져본다고 했을 때 가정을 해보았다. 그랬더니 순서가 대충 이렇게 나올 것 같다. 1 - 2 - 5(return) - 4 - 3(?) - 6 ... 어떻게 순서를 잡냐에 따라 다르겠지만 4에서 3으로 가는게 말이 될까? 2에서 이웃한 노드도 사실 상 3, 4, 5이기 때문에 2 - 3으로의 순서도 고려해볼 필요가 있다. 깊이 우선 탐색에서는 가장 먼 노드가 몇개있는지 ..
2018 KAKAO BLIND RECRUITMENT LEVEL 2 레벨 2문제 치고는 상당히 쉬운 문제라 고민하지 않고 풀었다. 단지 고민했던거라면 ArrayList의 사용이냐 LinkedList의 사용이냐였는데 일단 어느 하나 구현해보고 나서 무엇이 더 빠른지 체크만 하고 왜 그렇게 나왔는지에 대해서 공부해보기로 했다. 다만 알고리즘 LRU(Least Recently Used)을 사용한다고 나와있었는데, 그 알고리즘이 어떤 알고리즘인지 알 수 없던 터라 그 부분에 대해서는 어떤 개념인지에 대해 조사를 해보았다. LRU는 캐시 사이즈가 주어지는데, 그 사이즈 안에 있는 노드들이 있고 사이즈를 벗어나게끔 하나의 노드가 들어오게 되면 가장 오래된 노드를 버리고 새로운 노드를 받아들인다. 또한, 데이터 노드가..
2018 KAKAO BLIND RECRUITMENT LEVEL 2 LEVEL2인 뉴스클러스터링 문제만 해도 이렇게 까지 오래걸리지는 않았다. 그리고 문제가 나름 길었어도 풀 의욕은 있었는데 이 문제 만큼은 의욕이 떨어졌다. 계속되는 반복문에 일회성 계산이 아닌, 터뜨린 자리는 위에서부터 순차적으로 내려와 메꾸는 알고리즘 형태를 가지고 있어야 했기 때문이다. 물론, 더 나은 알고리즘으로 푼 사람들도 있겠지만 말이다. 중요한건 어떠한 참고서나 메소드 등을 활용하지 않았다는 점에서 문제를 풀었을 때 희열이 있었다. 내가 생각한 이 문제의 핵심적인 부분들은 다음과 같다. 1. 네모 확인하기 ---네모 형태가 없으면 break--- 2. 확인된 사항의 인덱스를 공백으로 변경(꼭 공백일 필요는 없다.) 3. 공백 ..
2018 KAKAO BLIND RECRUITMENT LEVEL2 문제 문제 자체가 어렵게 다가왔다. 사실 이렇게 귀찮은 문제는 문제 잘못골랐다고 하면서 다음 문제로 넘기게 되는데 2018 카카오 공채시험을 다 풀기로 마음먹었던 터라 문제 하나하나를 읽어보았다. 유사도를 구하는 문제였지만 어떤 수학적 지식 필요 없이 문제만 읽으면 됐다. 문제 중에서 집합과 유사도에 관련한 설명이 나온다. 예를 들어 집합 A= {1, 2, 3}, 집합 B= {2, 3, 4}라고 할 때, 교집합 A ∩ B= {2, 3}, 합집합 A ∪ B= {1, 2, 3, 4}이 되므로, 집합 A, B사이의 자카드 유사도 J(A, B)= 2/4 = 0.5가 된다. 집합 A와 집합 B가 모두 공집합일 경우에는 나눗셈이 정의되지 않으니 따로 ..
같은 Level 1이었던 비밀지도 편에서는 이렇게 오래걸리지는 않았지만, 다트 게임에서 시간을 오래 쓴 것 같다. 이유는, 조금 더 효율적인 방법이 있을 줄 알았다. 지속적으로 S, D, T에 대해 파악해야 하며, 한번에 들어오는 값에 의해서 숫자를 어떻게 분리할 것인지, option이 나왔을 때에 이전 점수에 대해 어떻게 처리할 것인지, 현재 값을 어떻게 - 시키는지 이런 잡다한 고민들 때문에 시작하기부터 애를 먹었다. 처음부터 비효율적이라고 생각하게 되면 시도조차 하지 않는 성격이기에 노가다성의 알고리즘 문제보다는, 효율적인 알고리즘을 생각해내는 것이 더 어울리는 것 같다. 이 문제가 무작정의 알고리즘 문제는 아니지만, 이해는 나름 쉽지만 구현하는데에 애를 먹기도 하고, 상수처럼 값을 집어넣어 하는 ..