Problem Solving

문제 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이 오늘 날짜를 기준으로 유효기간이 지난 개인정보의 번호를 구하는 문제이다. 이 문제를 년, 월, 일로 따로 관리해서 유효기간을 더하는건 12월이 넘으면 년을 더하고 이런 부분에서 복잡할 것이라고 생각했다. 그러면 어떻게 단순화할 수 있을까? 바로 일로만 관리하는 것이다.(28 * 12 * 2000) + (28 * 12) + 28의 값을 하더라도, 60만의 숫자가 나온다. 1. 약관 종류에 대한 유효기간을 저장할 int배열을 만들어 유효기간을 저장한다. 2. 오늘 날짜에 대한 일 수를 구한다. 3. 개인정보 수집 일자와 유효기간을 더해서 오늘 날짜에 대한 일..
문제 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이내적을 구하는 문제이다. a, b 배열에 있는 인덱스가 같은 값을 곱한 합을 구하는 문제이다. 1000개의 길이에서 -1000 ~ 1000 사이의 수가 나올 수 있으므로,1000 * 1000 * 1000 : 10억이므로 int형으로 더해도 overflow가 되지 않는다. 소스코드class Solution { public int solution(int[] a, int[] b) { int length = a.length; int answer = 0; for (int i = 0; i 실행결과
문제https://school.programmers.co.kr/learn/courses/30/lessons/42883 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이2~100만 자리의 숫자가 나올 때, k개의 숫자를 지워서 최대 숫자를 만드는 문제이다. k개를 숫자를 어떻게 지우는게 최대 숫자가 나온다고 할 수 있을까?1. 첫번째 자리가 높을수록 좋다.2. 순회하면서 이전에 들어왔던 숫자가 더 작으면 지우는 것이 좋다. 2번에서 뭔가 이전에 들어왔던 숫자를 저장해서 다 지운다? => 스택이구나 라는 생각이 들었다.스택을 사용해서 다 넣고 다 지운다고 해도 200만 연산이니 사용해도 된다고 생각했다. 1. 스..
문제 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이동영상 재생기가 있다. 오프닝 구간에 있으면 오프닝 끝으로 자동으로 이동이 되고 10초후 10초전으로 이동했을 때 현재 몇분 몇초를 보고 있는지 구하는 문제이다. 이 문제는 분/초로 나누면 구현할 수는 있겠지만 복잡하다. 그래서 나누는 것이 아닌 초로 모두 통합해서 생각하면 60초를 넘을 때, 마이너의 값을 가지는 초가 될 때를 생각하지 않아도 되어 더 편리할 것이다. 1. 현재 위치, 동영상의 길이, 오프닝 시작 끝 시간을 모두 초로 변경한다. 2. 현재 위치가 오프닝 스킵하는 위치인지 확인하고 command를 수행한다. 2-1. prev이면 마이너스 ..
문제 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이로또를 구매해서 번호가 있어 알아볼 수 없는 번호와 알아볼 수 있는 번호가 주어졌을 때, 최대/최소로 몇등까지 할 수 있었는지 구하는 문제이다. 6번 선형적으로 순회해서 숫자를 찾는 것은 비효율적이라고 생각해, 집합을 사용했다. 당첨 번호에서 내 복권의 보이는 숫자들중 몇개가 맞는지 + 알아 볼 수 없는 번호의 수 두가지를 계산해야한다. 알아볼 수 없는 번호가 모두 맞았을 때의 등수 : 최대 등수알아볼 수 없는 번호가 모두 틀렸을 때의 등수 : 최소 등수 라고 볼 수 있다. 1. 당첨번호를 모두 집합에 넣는다. 2. 집합에 있으면 당첨 될 수 있는 번호와 ..
문제 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이명함에 가로 세로 크기 데이터가 주어지는데, 명함을 회전에서 지갑을 담을 수 있을 때 지갑의 최소 크기를 구하는 문제이다. 일단 회전을 해서라도 지갑에 명함을 전부 다 담아야한다는 생각을 했다. 1. 한쪽은 큰 길이 + 한쪽은 짧은 길이에서 최댓값을 구하면 지갑을 전부 담을 수 있고, 최소 지갑의 크기가 나올 것이라고 생각했다. 2. 너비를 큰 길이, 높이를 짧은 길이로 잡고, 명함의 너비, 높이 값을 가져온다. 2-1. 비교해서 둘 중에 큰 길이에 너비와 비교해 최댓값을 구한다. 2-2. 비교해서 둘 중에 짧은 길이에 높이와 비교해 최댓값을 구한다. 3...
문제 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이포켓몬은 번호로 종류를 구분하는데, N개에서 N/2개를 가져갔을 때, 최대 종류의 개수를 구하는 문제이다. 기존풀이종류가 적은 포켓몬을 먼저 가는 것이 최대 종류의 개수를 가져갈 수 있을 것이라고 생각했다. 1. HashMap을 이용해서, 포켓몬의 번호와 개수를 기록한다. 2. HashMap의 key를 순회해서, ArrayList에 포켓몬 번호와 개수들을 다 넣고, 개수를 기준으로 오름차순 정렬한다. 3. 가져간 종류의 개수를 계산하면서, 종류의 개수가 N/2 이상이되면 리턴한다. 더 좋은 풀이생각해보면, 종류의 개수와 상관없이 모두 1개를 가져가는 것이 ..
문제https://school.programmers.co.kr/learn/courses/30/lessons/388352 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이1~n까지의 숫자에서 5개를 뽑아 q배열에 있는 암호코드와 일치하는 수 조합의 개수를 찾는 문제이다. 1. 재귀적 가치지기 기법으로 집합을 사용해 5개를 뽑는다. 2. 5개를 뽑으면 전체 순회해서, 암호 코드와 일치하는지 확인해서 일치하면 answer를 증가시킨다. 가지치기를 이용할 수 있는 이유? 최대 30까지 수가 나오는데, 5개를 뽑는 것이다.(30 * 29 * 28 * 27 * 26)/(5 * 4 * 3 * 2 * 1)[30까지의 수에서..
문제 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이문자열에 있는 문자들 중, 1번 나온 문자들을 오름차순 정렬해서 하나의 문자열로 보여주는 문제이다. 1. 알파벳의 개수를 담을 배열을 생성한다. 2. 알파벳의 개수를 기록한다. 3. 1번 나온 문자들을 StringBuilder로 하나의 문자열로 만들어서 리턴한다. 소스코드class Solution { public String solution(String s) { int length = 'z' - 'a' + 1; int[] cnt = new int[length]; for (int i = 0; i 실..
문제 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이물류 창고에 있는 컨테이너를 2가지 방식으로 꺼냈을 때, 남은 컨테이너의 개수를 구하는 문제이다. 1. 삭제 처리하는 boolean 2차원 배열을 생성한다. 2. 길이 여부에 따라서 크레인이나 지게차로 컨테이너를 꺼냈을 때 처리 한다. 2-1. 지게차로 컨테이너를 꺼냈을 때, bfs를 이용한다.외부에서 꺼낼 컨테이너가 있다면(ch와 같으면서 삭제가 안되었을 경우), 삭제처리와 방문처리를 해준다.(방문처리를 안해주면, 안에 있는 컨테이너도 꺼내질 수 있는 경우가 있을 수 있어서다.) 삭제 처리가 된 컨테이너들은 큐에 담아서 bfs를 수행하면서 외부의 정점들을..
gretea5
'Problem Solving' 카테고리의 글 목록 (5 Page)