코딩연습
-
같은 숫자는 싫어코딩연습 2020. 8. 2. 23:50
자바가 낡았다는 느낌을 물씬 받게 하는 문제였다. 배열은 크기가 고정되기 때문에 동적으로 요소를 추가 제거를 할 수 없다. 그래서 list를 사용해야 하는데, list와 array 간 타입 변환이 쉽지 않다. 이런 게 쉽지 않다는 건 모두 코딩을 해줘야 한다는 의미이다... '같은 숫자는 싫어'라는 문제는 입력으로 숫자열이 들어와 있을 때, 순차적으로 중복 숫자는 제거하고 다른 숫자들만 출력을 하는 것이다. 그렇다고 모든 중복을 제거하는 것은 아니다. 연속 중복만이 제거될 뿐, 이점은 예시에서 잘 설명이 되어 있는데 문제 풀 때는 놓친 포인트였다. public class Solution{ public int[] solution(int[] arr){ ArrayList temp = new ArrayList(..
-
두 정수 사이의 합코딩연습 2020. 7. 30. 22:28
JAVA를 연습하는 의미로 프로그래머스 코딩 테스트 문제를 JAVA로 해결하고 있다. 두 정수 사이의 정수들의 합을 계산하는 문제를 풀어보았다. 일단 주어지는 두 개의 정수가 어느 것이 큰지 모른다. 그래서 순서를 정해주는 게 우선 할 일이다. 그다음은 작은 정수에서 순차적으로 더해주면 된다. 처음에는 if 문을 이용하여 순서를 정해주었다. Class Solution{ public long solution(int a, int b){ long answer = 0; if ( a > b){ } else if ( a < b){ } else{ } } } 그런데 다른 사람들의 풀이를 보니 Math 클래스를 활용하여 크기를 정해주고 있었다. 그거를 이용하여 좀 더 깔끔하게 코드를 정리해보면 Class Solution..
-
(프로그래머스) 코딩테스트 연습 > 해시 > 위장코딩연습 2020. 3. 25. 18:40
스파이들은 매일 다른 옷을 조합하여 자신을 위장해야 한다. 조합할 옷에 관한 정보는 종류와 이름으로 주어진다. 스파이는 최소한 한 개의 옷은 위장에 사용해야 한다. 이 문제는 옷의 개수를 종류별로 세어준다음 경우의 수를 계산해주면 된다. 예를 들어 'a':5, 'b':3, 'c':2와 같이 a타입 5개, b타입 3개 c타입 2개가 있다면 우리가 고를 수 있는 선택지는 6x4x3-1이 된다. 여기서 곱하는 수가 각각의 타입별 옷의 개수보다 1개 더 많다는 것을 주목해야 한다. 왜 1개를 더 세어주냐면 각 타입 별로 선택을 하지 않는 경우를 헤아리기 위함이다. 그리고 1을 빼어주는 이유는 앞의 곱하기에서 모든 타입을 선택하지 않는 경우를 세어버렸기 때문에 그걸 제외시키기 위한 것이다. def solution..
-
(프로그래머스) 코딩테스트 연습 > 그리디 > 저울코딩연습 2020. 3. 25. 00:12
추의 무게가 배열로 주어지고, 추가 측정할 수 없는 무게의 최소 값을 구하는 문제이다. 예를 들어 1, 2, 3 짜리 추가 주어졌다면, 1, 2, 3은 각각의 추로 무게를 달면 되고 4(1+3), 5(2+3), 6(1+2+3) 이런 식으로 측정이 가능하다. 그렇다면 정답은 7이 된다. 만약에 2,3,4가 주어졌다고 생각하면? 1이 정답이 된다. def solution(weight): weight.sort() if weight[0] > 1: return 1 for answer in range(1, sum(weight)+2, 1): temp = answer if temp in weight: continue else: for i in range(len(weight)-1, -1, -1): if temp < we..
-
(프로그래머스) 코딩테스트 연습 > 그리디 > 체육복코딩연습 2020. 3. 19. 23:33
체육시간에 체육복을 도둑맞은 학생들이 있고, 여벌을 갖고 있는 학생들이 어떻게든 체육복을 빌려줘서 체육수업을 참가하게 한다. 이때 가장 많이 참여한 인원수를 구하는 문제이다. 이 문제에 몇 가지 주의해야 할 조건이 있는데, 도둑맞은 학생들의 번호는 중복되지 않고, 여벌을 갖고 있는 학생들의 번호도 중복되지 않는다. 여 별을 갖고 있는 학생도 도둑을 맞을 수 있으며, 그러면 여벌은 자신이 챙기고 다른 학생에게 빌려주지 못한다. 빌려주는 것도 자신의 번호에서 +1, -1에 해당하는 학생에게만 가능하고 학생 번호는 1~총원 범위 내에서 주어지고 총원의 범위는 2~30까지이다. 앞에서의 조건들을 대충 보고 문제를 풀면 매우 고생하게 된다. 플밍에서 주어진 제한 조건이 늘 핵심인 것 같다. def solution..
-
(프로그래머스) 코딩테스트 연습 > 해시 > 전화번호 목록코딩연습 2020. 3. 19. 01:18
전화 번호부가 주어지고 한 번호가 다른 번호의 접두사인 경우 False 그렇지 않으면 True를 반환하는 문제이다. 이문제가 왜 해시로 분류되는지 잘 모르겠다. 전화번호부라는 것 때문인가... 여튼 해시로 어떻게 풀어야할지 잘몰라서 그냥 풀었다. from itertools import combinations def solution(phone_book): for two in combinations(phone_book, 2): num = sorted(list(two)) a, b = num[0], num[1] diff = int(b[::-1]) - int(a[::-1]) div = 10**len(num[0]) if diff % div == 0: return False return True 일단 전화번호 두개를..