본문 바로가기
  • 실행력이 모든걸 결정한다
반응형

분류 전체보기580

[n진수] n진수 게임 - 2018 KAKAO BLIND RECRUITMENT 해결 방법 10진수 i를 n진수로 변환한 값을 문자열 형태로 반환하는 converter함수를 만들어 두었다. 16진수 이하의 변환은 16진수 기준으로 변환해도 모두 적용되므로, 2진수든 8진수든 모두 16진수 변환 방법을 써도 된다. 0부터 n진수로 변환한 값들을 임의의 문자열에 계속 추가해두면 되는데, 최종 문자열의 길이는 t*m이면 충분하다. 이제 이 문자열을 참고하여 튜브 차례에 해당하는 문자들을 추출하면 문제가 해결된다. 소스코드 #include #include using namespace std; char hexa[17] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; string converter(int n, int i.. 2022. 5. 31.
[그리디] 셔틀버스 - 2018 KAKAO BLIND RECRUITMENT 해결 방법 이 문제의 핵심은 막차의 만원 여부이다. i) n, t를 이용하여 버스의 timetable을 만든다. ii) 크루의 timetable을 정렬한다. iii) 버스의 timetable과 크루의 timetable을 차례대로 비교해가며 탑승할 수 있는 크루를 먼저 온 순서대로 태운다. 단, 막차는 몇 명이 타는지 카운트해야 한다. iv) 막차가 만원이 아니라면, 즉, 카운트한 값이 m과 다르다면 콘은 그대로 막차를 타고가면 된다. v) 막차가 만원이라면, 즉, 카운트한 값이 m과 일치하다면 콘은 막차에서 가장 늦게 탄(우선순위가 가장 낮은)사람의 도착시간보다 1초 일찍 오면 된다. 소스 코드 #include #include #include using namespace std; string time_c.. 2022. 5. 28.
[집합] 뉴스 클러스터링 - 2018 KAKAO BLIND RECRUITMENT 해결 방법 i) str1, str2에 있는 대문자를 모두 소문자로 전환한다. ii) str1, str2에 대하여 각각 연속된 두 영문자씩 쪼개어 벡터에 넣어준다. iii) 두 벡터의 크기가 모두 0인 경우와 두 벡터 중 하나의 크기가 0인 경우를 반영한다. iv) 두 벡터의 교집합 요소를 찾는다. 값이 같은 요소가 있기 때문에 방문 배열을 활용한다. v) 합집합 요소의 개수를 찾는다. 합집합 요소는 두 벡터의 크기의 합에서 교집합 요소의 개수를 뺀 값이다. -> n(A∪B)=n(A)+n(B)-n(A∩B) 소스 코드 #include #include using namespace std; vector s1; vector s2; int inter; // 교집합 요소의 개수 bool check[1001]; //s.. 2022. 5. 24.
[Linked List] 표 편집 - 2021 카카오 채용연계형 인턴십 해결 방법 이 문제는 연결리스트를 이용하여 풀 수 있다. 굳이 포인터를 사용하지 않고도 배열을 이용하여 연결리스트를 구현할 수도 있다. 또, 'Z' 명령은 최근에 삭제했던 행을 복구하는 명령이므로 Stack이 필요하다. 주의할 점이 있다면, 맨 앞에 있는 요소는 앞 노드로 연결하는 링크가 없고, 맨 뒤에 있는 요소는 뒷 노드로 연결하는 링크가 없음을 고려해야 한다. 그리고 'U', 'D' 명령의 경우에는 이동할 칸 수를 나타내는 정수가 나오는데, 이 정수는 한 자리 숫자가 아닐 수도 있기 때문에 모든 자리 수를 추출해야 한다. 노드를 삭제하는 경우에는 기존 노드의 앞, 뒤 노드를 서로 이어주면 되고, 노드를 복구하는 경우에는 제거되었던 노드의 앞, 뒤 노드를 해당 노드로 이어주면 된다. 소스 코드 아래 .. 2022. 5. 22.
[BFS] 거리두기 확인하기 - 2021 카카오 채용연계형 인턴십 해결 방법 맨해튼 거리의 개념을 모르더라도 단순히 BFS 알고리즘으로 해결할 수 있다. 자신을 제외한 응시자들 중에서 BFS 거리가 2이하인 응시자가 있다면 거리두기를 준수하지 않은 것으로 판단하면 된다. 주의할 점이 있다면 이 문제는 테스트케이스 5개가 있기 때문에 queue와 방문 배열을 초기화하는 작업이 필요하다. 그리고 연산 횟수를 줄이기 위해 거리두기 준수 여부를 나타내는 변수를 활용하여 거리 두기를 준수하지 않다는 사실이 확정났다면 해당 케이스에 대해서는 추가적인 연산을 수행하지 않도록 했다. 또, BFS 깊이가 3을 넘어가는 경우에는 queue에 구조체를 넣지 않았다. 소스 코드 #include #include #include #include using namespace std; struct.. 2022. 5. 17.
[시뮬레이션] 수식 최대화 - 2020 카카오 인턴십 해결 방법 (i) 문자열을 파싱하여 정수 부분과 연산자 부분을 따로 추출하여 벡터에 저장한다. (ii) 우선 순위를 배정한다. 우선순위에 대한 경우의 수는 6이기 때문에 6가지 경우만 시뮬레이션 하면 된다. (iii) 남아 있는 연산자들 중 가장 우선 순위가 높은 연산자를 찾아서, 해당 연산자에 대한 연산을 수행한다. (iv) 연산 결과는 합쳐서 정수 벡터에 반영하고, 사용한 연산자는 연산자 벡터에서 제거하고, 남은 해당 연산자 카운트를 1 감소시킨다. 이렇게 하면 연산마다 정수 벡터와 연산자 벡터의 크기는 각각 1씩 줄어들 것이고, 모든 연산을 수행했을 때는 정수 결과값 하나만 남게 된다. (v) 모든 경우에 대한 정수 결과값들의 최댓값을 구한다. 소스 코드 #include #include #inclu.. 2022. 5. 14.
[DFS] 경주로 건설 - 2020 카카오 인턴십 해결 방법 DP와 DFS를 병행하여 해결하였으며, DP없이 DFS로만 해결하면 시간초과가 나온다. 이 문제의 경우에는 나아가는 방향이 직진인지 코너인지를 판별하여 100 또는 600(코너 비용 500추가)을 더해야 한다. 이를 위해서는 다음 DFS 재귀함수를 반복할 때 현재의 진행 방향이 전달되어야 한다. 이 때, 동서남북을 일일이 가려낼 필요는 없으며 가로(동서) 방향과 세로(남북) 방향만 알면 된다. 연산시간 절약을 위해 현재 dfs 재귀에서 cost가 answer값을 넘는다면 더 이상 dfs 재귀를 수행하지 않도록 했다. 그리고 진행 칸에 대한 최소 비용이 갱신되지 않았다면 이 역시 더 이상 dfs 재귀를 수행하지 않도록 하되, 직선 도로와 코너 건설 비용의 차이인 500이 있을 수 있다는 사실을 .. 2022. 5. 11.
[Spring] XML 설정 방식을 Annotation으로 바꾸기 1. 자바 코드에 의한 설정이 편리한 점 - 컴파일러나 IDE를 통한 타입 검증이 가능 - IDE의 자동완성 기능의 이용 가능 - 이해의 편리함 - 복잡한 bean 설정이나 초기화 작업을 쉽게 적용 가능 2. 컨텍스트 설정 변경 - 처음부터 프로젝트를 Spring Boot로 만들었을 경우에는 해당 과정을 생략할 수 있다. - web.xml에서 루트 컨텍스트와 서블릿 컨텍스트의 contextClass 파라미터 값을 모두 AnnotationConfigWebApplicationContext으로 설정하고, contextLocations 파라미터 값을 설정 클래스 또는 스캔 대상 패키지로 설정하면 된다. contextClass org.springframework.web.context.support.Annotati.. 2022. 5. 6.
[Spring] 리소스 추상화 1. 리소스 추상화란? 외부 파일을 가져오는 방법은 다양하다. 예를 들어, 개발 시스템의 특정 폴더에 있는 파일, HTTP 또는 FTP 프로토콜로 접근할 수 있는 웹상의 파일, Classpath에 있는 파일 등이 있다. 이렇게 리소스가 저장되는 방식은 다양한데, 다른 방식으로 저장되어 있는 리소스 파일을 가져올 때마다 자바 소스코드를 바꾸는 것은 좋지 않다. 그래서 스프링은 리소스 추상화를 위해 Resource라는 추상화 인터페이스를 정의한다. public interface Resource extends InputStreamSource { boolean exists(); boolean isOpen(); URL getURL() throws IOException; File getFile() throws IO.. 2022. 5. 1.