반응형

알고리즘/프로그래머스 6

2019 KAKAO BLIND RECRUITMENT (오픈채팅방)

이 문제는 record가 주어지고 각각을 공백으로 구분했을때 첫번째는 타입, 두번째는 유저 아이디, 세번째는 닉네임이 주어진다. 각각의 타입에 맞게 결과를 기록 및 유저 아이디를 변경 해야한다. 구현을 하기 앞서 문제 분석을 먼저 하였다. (특히 프로그래머스 문제는 문제 길이가 길고 이해 하는데 어려움이 있다.) 아이디어 문제 구현에 필요한 변수부터 생각해보자. 1. record에 포함된 내용은 각각 "타입", "유저 아이디", "닉네임"이므로 이 3개를 저장할 변수가 필요하다. 2. 결과를 저장할 배열이 필요하다. => vector answer 3. 타입에 따라 특정 유저 아이디의 닉네임을 저장할 공간이 필요하다. => map m 상태를 그냥 배열에 pair 이렇게 저장할경우 Change 타입시 모든 ..

2021 Dev-Matching: 웹 백엔드 개발자(상반기)(행렬 테두리 회전하기)

행렬의 세로 길이(행 개수) rows, 가로 길이(열 개수) columns, 그리고 회전들의 목록 queries가 주어질 때, 각 회전들을 배열에 적용한 뒤, 그 회전에 의해 위치가 바뀐 숫자들 중 가장 작은 숫자들을 순서대로 배열에 담아 return 하도록 solution 함수를 완성하는 문제이다. 예시는 다음과 같다. 쿼리가 다음과 같이 주어졌을때 각각의 쿼리마다 최소가 되는 숫자는 아래 그림을 통해 알 수 있다. 이 문제는 따로 알고리즘이 들어가지 않는다. 각각의 테두리를 순회하면서 이전 숫자를 기억하고 다음 숫자에 업데이트 해주면 된다. 처음에는 복잡하게 queue에 넣어서 어쩌구 저쩌구 하려고 했는데 뻘짓이였다. #include #include #include #include using name..

2021 Dev-Matching: 웹 백엔드 개발자(상반기)(로또의 최고 순위와 최저 순위)

2021 Dev-Matching 상반기 1번 문제로 지워진 로또 번호를 가지고 최대 등수와 최소 등수를 구하는 문제이다. 번호는 6개 밖에 안되기 때문에 2중 for문을 돌려도 n^2 즉 36 번밖에 연산을 하지 않는다. #include #include using namespace std; vector solution(vector lottos, vector win_nums) { vector answer; int match = 0; int zeroCnt = 0; for(int i = 0; i < lottos.size(); i++) { if(lottos[i] == 0) { zeroCnt++; continue; } for(int j = 0; j < win_nums.size(); j++) { if(lottos[..

2018 KAKAO BLIND RECRUITMENT (비밀지도)

문제를 보는 순간 비트연산이 떠올랐다. 내가 문제를 많이 안풀어봐서 그런가 카카오 문제가 뭔가 독특한거 같다. 비트연산은 해본 경험이 있지만 이를 문자열로 변환하거나 출력해본적이 없었다. 검색의 도움을 받아 "bitset" 이라는 헤더가 있다는 것을 알게 되었고 bitset(숫자) 형식으로 사용하고 to_string을 이용하여 문자열로 변환할 수 있었다. 풀이는 다음과 같다. #include #include #include using namespace std; vector solution(int n, vector map1, vector map2) { vector answer; vector result(n, 0); for(int i = 0; i < result.size(); i++) { result[i] ..

2021 카카오 채용연계형 인턴십 (거리두기 확인하기)

문제를 어디서 많이 봤다고 생각했는데 작년에 실제로 테스트 봤던 문제였다. 당시에는 Python으로 문제를 풀었었다. 당시 작성했던 코드가 있는데 지금 보면 어떻게 풀었는지 알수가 없다. (뭔가 알고리즘 없이 맨해튼 거리로만 푼거 같은데 도저히 이해 불가능) def solution(places): answer = [0,0,0,0,0] for place_num,place in enumerate(places): person_location = [] flag =True for i,row in enumerate(place): for j in range(len(row)): if row[j]=="P": person_location.append((i,j)) for i in range(len(person_locatio..

2021 카카오 채용연계형 인턴십 (숫자 문자열 영단어)

입력으로 영어와 숫자가 포함된 문자열이 들어오면 문자열을 원래 숫자로 치환하는 문제이다. 개발은 Java로 하는데 알고리즘은 C++로 푸는 것이 편해서 오랜만에 풀다보니 문법을 다 까먹었다. 처음에는 s.length() 만큼 반복하면서 알파벳을 누적하고 누적과 동시에 해당 문자열이 숫자로 치환 가능한지 체크하는 함수를 만들어 풀려고 시도 했다. 그냥 삽질했음.... std::string 의 메소드를 잘 알지 못해서 이런 이상한 짓을 하였다. 사실 Python에는 replace함수를 매우 간단히 쓸수 있어 C++은 외우지 않았다.... (std::string에 replace가 있다니... 심지어 to_string 도 내장... WOW) 풀이는 다음과 같다. #include #include using nam..

1
반응형