본문 바로가기

ALGORITHM

(30)
[프로그래머스 Java] 같은 숫자는 싫어 코딩테스트 연습 - 같은 숫자는 싫어 배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 programmers.co.kr ⏱소요 시간 - 정확성 20분 / 효율성 40분 = 1시간 🔑해결 방법 처음으로 효율성까지 검사하는 문제였다. 처음 아니랄까봐 효율성에서 모두 실패를 해서 질문하기에서 힌트를 얻어 문제를 다시 풀었다. 첫 번째 제출한 코드는 1. arr[]에 있는 값들을 모두 list에 넣는다. 2. list의 기준 값과 바로 다음 값을 비교하면서 같으면 list에서 기준 값을 삭제한다. 그리고 for문을 다시 처음부터 반복한다. 3. for문이 마무..
[프로그래머스 Java] 가운데 글자 가져오기 코딩테스트 연습 - 가운데 글자 가져오기 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다. 재한사항 s는 길이가 1 이상, 100이하인 스트링입니다. 입출력 예 s ret programmers.co.kr ⏱소요 시간 - 14분 🔑해결 방법 문자열의 길이가 짝수냐 홀수냐에 따라 다르므로 분기 처리를 해줬다. 그리고 String의 substring() 메서드를 통해 원하는 위치의 문자열만 뽑아왔다. String substring(int begin, int end) : begin부터 end-1까지의 문자열을 가져온다. (문자열의 위치는 0부터 시작함) end 위치는 가져오지 않는다는 특성으로 한 글자만 가져올 때도 substri..
[프로그래머스 Java] 3진법 뒤집기 코딩테스트 연습 - 3진법 뒤집기 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수 programmers.co.kr ⏱소요 시간 - 이해하는데 1시간 15분 🔑해결 방법 진법을 다 까먹어서 구글링을 해서 풀었다. 진법 변환부터 정리하자면 다음과 같다. 다른 진법간의 변환도 이와 다르지 않다. 또, 새롭게 알게된 메서드들이 있다. 첫 번째. Integer.toString(int i, int radix) : i를 주어진 진법(radix)의 문자열로 변환 두 번째. Math.pow(double a, double b) : a의 b제곱을 ..
[프로그래머스 Java] 2016년 코딩테스트 연습 - 2016년 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까 programmers.co.kr ⏱소요 시간 - 35분 🔑해결 방법 사실 이 문제는 요일을 구하는 복잡한 알고리즘이 이미 존재할 것 같아서 구글링해서 코드를 짰다.ㅎㅎ 찾아보니 별게 없어서 스스로 생각해볼껄... 후회가 되는 문제. 다음에 꼭 다시 풀어보자! 규칙을 한 번에 알 수 없는 문제의 경우, 쉽게 알 수 있는 예로부터 수식을 얻어내면 간편하다. 1월 8일, 9일 정도면 금요일, 토요일이라는걸 바로 알 수 있으니 해당 예시로 아래 수식을 계산해보자..
[프로그래머스 Java] K번째 수 코딩테스트 연습 - K번째수 [1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3] programmers.co.kr ⏱소요 시간 - 1시간 5분 🔑해결 방법 이차원 배열과의 관계를 찾아내야 해서 엄~청 헷갈렸던 문제 이차원 배열의 요소의 인덱스를 적어놓고, 인덱스와 매치하면서 for문을 차분히 돌려보면 규칙을 발견할 수 있다. 항상 이차원 배열만 만나면 뇌가 굳는 것 같다ㅠㅠ 평정심을 갖고 문제를 풀어야겠다. 문제는 다음과 같은 흐름으로 전개된다. 1. 주어진 배열을 i번째 숫자 ~ j번째 숫자까지 잘라 array2[] 배열에 저장한다. 2. 자른 배열을 정렬한다. 3. 정렬된 배열에서 k번째 수를 answer[] 배열에 저장한다. 이러한 흐..
[프로그래머스 Java] 체육복 코딩테스트 연습 - 체육복 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번 programmers.co.kr ⏱소요 시간 - 25분 🔑해결 방법 두 번째 풀어서 빨리 풀었던 문제다. 체육복을 빌려주는 로직을 처리하기 전, 여벌이 있는데 도난당한 학생들을 먼저 처리해주기 위해 첫 번째 이중 for문을 실행하였다. 여기서 포인트는 lost[]와 reserve[]에서 겹치는 학생은 모두 두 배열에서 제외시켜야 한다는 점이다. 이 점을 간과해서 reserve[i] = -1을 빼먹고 첫 번째 제출해서 틀렸다ㅠㅠ (이미 도난당했으니 빌려줄 수도 없기 때문에 빼줘야 함) 그리고 0이..
[프로그래머스 Java] 모의고사 코딩테스트 연습 - 모의고사 수포자는 수학을 포기한 사람의 준말입니다. 수포자 삼인방은 모의고사에 수학 문제를 전부 찍으려 합니다. 수포자는 1번 문제부터 마지막 문제까지 다음과 같이 찍습니다. 1번 수포자가 찍는 programmers.co.kr ⏱소요 시간 - 1시간 40분 🔑해결 방법 하... 이 문제는 정말 힘들었다. 수식을 찾는 것 까지는 괜찮았는데 배열을 통해서 가장 많이 맞힌 사람을 저장하려고 하니, 동일 점수가 있을수록 뭔가 꼬였다. 왜냐? 배열의 길이는 한 번 정해지면 유동적으로 바꿀 수 없기 때문이다......ㅠ 그러므로 앞으로 유동적인 무언가를 저장할 때는 리스트를 사용하자. 절대 잊지말자!!! 또 한 가지, a, b, c 배열이 answers 배열의 길이보다 작은 경우를 생각해줘야하는..
[프로그래머스 Java] 완주하지 못한 선수 코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수 programmers.co.kr ⏱소요 시간 - 30분 🔑해결 방법 문자열도 정렬이 가능하다. 문자열을 정렬해서 두 배열을 같은 순서대로 비교하면서 달라지는 순간! 그 사람은 완주하지 못했다고 할 수 있다. 완주하지 못한 선수가 한 명이라서 가능했던 문제 여러 명이 되면 정렬로 구현이 불가능하지 않을까 싶다. 다만, 헤맸던 부분은 answer = participant[i + 1]; ---> 이 부분을 추가해줘야 함 완주하지 못한 선수가 participant에서 맨 마지막 사..