Algorithms

Algorithms/백준

[백준] '단어 정렬' - Java

알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오. 길이가 짧은 것부터 길이가 같으면 사전 순으로 단, 중복된 단어는 하나만 남기고 제거해야 한다. 사전 프로그램을 만드는 문제이다. 대신 조건이 두가지있는데, 마냥 내림차순, 오름차순 정렬을 하는 것이 아닌 1. 길이가 짧은 것부터 우선순위 2. 그 후 길이가 같으면 사전순으로 조건을 어떻게 맞춰야할지 막막하기도 했다. Try 1) HashSet remove = new HashSet(); List input = new ArrayList(); // 1. 중복제거를 위해 HashSet에 값을 대입 for(int i = 0; i < N; i++) { remove.add(br.readLine()); } // ..

Algorithms/백준

[백준] '소트인사이드' - Java

배열을 정렬하는 것은 쉽다. 수가 주어지면, 그 수의 각 자리수를 내림차순으로 정렬해보자. 문제에서도 말했듯 배열을 정렬하는 것은 Arrays.sort() 메서드 사용이나, 변수사용으로 for문을 통해 정렬하는 방법 등 쉬울 수 있지만, 숫자가 주어지면 그 숫자를 각 토큰으로 판단하여 내림차순 정렬한 값을 반환해야한다. Answer 1) for(int i = 0; i < N.length(); i++) { sort[i] = N.charAt(i) - '0'; } Integer[] temp = Arrays.stream(sort).boxed().toArray(Integer[]::new); Arrays.sort(temp, Collections.reverseOrder()); String answer = ""; fo..

Algorithms/프로그래머스

[프로그래머스] '문자열 밀기' - Java

문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 A와 B가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면 밀어야 하는 최소 횟수를 return하고 밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요. 문자열 밀기라고 한다면, 배열에서나 리스트 등의 자료구조에서 특정 메서드를 통해 쉽게 해결할 수 있지만, 이 문제에서는 String만 주어졌을때 해결할 방법을 찾는 것이다. Solution 1) 다만 두 문자열이 주어지고, A를 기준으로 B문자열은 얼마나 이동했는지 (오른쪽으로만 밀게됨) 를 판단한다. for(int i = 0; i < A.lengt..

Algorithms/프로그래머스

[프로그래머스] '특이한 정렬' - Java

정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다. 이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다. 정수가 담긴 배열 numlist와 정수 n이 주어질 때 numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 ( = 각 숫자에서 n을 뺀 절대값) return하도록 solution 함수를 완성해주세요. n으로부터 가까운 순서대로 정렬한 배열 ( = 각 숫자에서 n을 뺀 절대값) 기준 값 N이 주어지면 그 값을 기준으로 가까운 순으로 "순위"를 매겨 return해야한다. 이 또한 Search(탐색)문제 인 것 같았다. Try 1) int[] answer = {}; List temp = new ArrayList(); // numlist에서 n이 속하는 인덱스를 찾는다. ..

Algorithms/프로그래머스

[프로그래머스] '로그인 성공?' - Java

머쓱이는 프로그래머스에 로그인하려고 합니다. 머쓱이가 입력한 아이디와 패스워드가 담긴 배열 id_pw와 회원들의 정보가 담긴 2차원 배열 db가 주어질 때, 다음과 같이 로그인 성공, 실패에 따른 메시지를 return하도록 solution 함수를 완성해주세요. 웹개발이나 실제 홈페이지에서 쓰일 듯한 로그인 시스템은 아니더라도 간접적으로 데이터가 어떻게 담기는지 알 수 있는 문제일 것 같았다. Try 1) String answer = ""; for(int i = 0; i < db.length; i++) { String id = db[i][0]; String pw = db[i][1]; if(id_pw[0].equals(id)) { // 아이디 / 패스워드 모두 일치 = 로그인 성공 if(id_pw[1].eq..

Algorithms/프로그래머스

[프로그래머스] '등수 매기기' - Java

영어 점수와 수학 점수의 평균 점수를 기준으로 학생들의 등수를 매기려고 합니다. 영어 점수와 수학 점수를 담은 2차원 정수 배열 score가 주어질 때, 영어 점수와 수학 점수의 평균을 기준으로 매긴 등수를 담은 배열을 return하도록 solution 함수를 완성해주세요. 처음 접했을때는 간단한 문제라고 느껴졌다. 2차원배열에 담긴 값들 i 인덱스의 값을 더해 리스트에 저장하고 정렬을 통해 순위를 매기면 되지 않을까 싶었다. 하지만 문제에서 요구하는 출력 기준은 처음 주어진 2차원 배열의 값의 인덱스 순서대로 순위를 출력하는 것이었다. Try 1) int[] answer = {}; List rank = new ArrayList(); List rank_num = new ArrayList(); int su..

Algorithms/프로그래머스

[프로그래머스] '유한소수 판별하기' - Java

소수점 아래 숫자가 계속되지 않고 유한개인 소수를 유한소수라고 합니다. 분수를 소수로 고칠 때 유한소수로 나타낼 수 있는 분수인지 판별하려고 합니다. 유한소수가 되기 위한 분수의 조건은 다음과 같습니다. 기약분수로 나타내었을 때, 분모의 소인수가 2와 5만 존재해야 합니다. 두 정수 a와 b가 매개변수로 주어질 때, a/b가 유한소수이면 1을, 무한소수라면 2를 return하도록 solution 함수를 완성해주세요. 문제에서 주어진 2와 5만을 소인수로 가져야하므로 a/b를 기본 토대로 해결해보고자 하였다. Try 1) int answer = 1; int[] fac = {}; List save = new ArrayList(); // 소수는 2부터시작하므로 2로 초기화 int i = 2; // n이 2보다..

Algorithms/프로그래머스

[프로그래머스] '달리기 경주' - Java

선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다. >> 가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다. 삼각형의 두 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 나머지 한 변이 될 수 있는 정수의 개수를 return하도록 solution 함수를 완성해주세요. equals() 와 같은 메서드로 이중for문을 돌며 간단히 풀어낼 수 있을거라 생각했지만, 시간제한을 신경써야하는 문제였다. Try 1) String[] answer = new String[players.length]; // 현재 등수 = String[] players // 해설진이 부른 이름 = String[] callings // // 경기 끝났을때의 선수들의 이름을 1등부터 순서대로 ..

Algorithms/프로그래머스

[프로그래머스] '명예의 전당 (1)' - Java

"명예의 전당"이라는 TV 프로그램에서는 매일 1명의 가수가 노래를 부르고, 시청자들의 문자 투표수로 가수에게 점수를 부여합니다. 매일 출연한 가수의 점수가 지금까지 출연 가수들의 점수 중 상위 k번째 이내이면 해당 가수의 점수를 명예의 전당이라는 목록에 올려 기념합니다. 즉 프로그램 시작 이후 초기에 k일까지는 모든 출연 가수의 점수가 명예의 전당에 오르게 됩니다. k일 다음부터는 출연 가수의 점수가 기존의 명예의 전당 목록의 k번째 순위의 가수 점수보다 더 높으면, 출연 가수의 점수가 명예의 전당에 오르게 되고 기존의 k번째 순위의 점수는 명예의 전당에서 내려오게 됩니다. 이 프로그램에서는 매일 "명예의 전당"의 최하위 점수를 발표합니다. 예를 들어, k = 3이고, 7일 동안 진행된 가수의 점수가 ..

LEFT
'Algorithms' 카테고리의 글 목록 (3 Page)