오늘 공부한것
* 알고리즘 문제풀이
* 3주차 강의 복습
어제보단 알고리즘을 푸는게
어제보다는 조금 더 수월했다
조금씩 방법을 알아가는 느낌이랄까?
익숙해지는 느낌이 아주 좋았다
문제는 코딩도 문제지만
코딩테스트에서 나오는 문제들이 수학적으로 풀어야 하는것들이있어서
그 부분들을 생각하는것도 힘들었다
문제7은 오늘 풀었던 문제 중에 가장 힘들고 복잡했던 문제였다
자연수를 뒤집는 것, 그리고 이것을 배열로 만드는 것
그것을 return 하는 것 모두가 쉽지 않았다
역시 구글링이 최고였다!!
하나 하나 짜맞추면서 해보니 다행히 풀렸다
문제7 자연수 뒤집어 배열로 만들기 |
문제 설명
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
|
import java.util.ArrayList; class Solution { // input // 자연수 n // // 계산 // 자연수 n을 뒤집기 reverse() // 숫자->문자열 "".toString or String.valueOf() // 뒤집은거 배열화 필요 // // output // 자연수 n을 뒤집어 각자리 숫자를 원소로 가지는 배열 public int[] solution(long n) { ArrayList<Integer> arrInt = new ArrayList<>(); //Array list 형 자료구조 개체 만듬 StringBuilder strReverse = new StringBuilder(String.valueOf(n)); //reverse 사용하기 위해 StringBuilder 클래스 생성, 숫자n을 문자열로 변경 strReverse = strReverse.reverse();//문자열n을 뒤집기 for (int i = 0; i < strReverse.length(); i++) arrInt.add(Integer.parseInt(String.valueOf(strReverse.charAt(i)))); //charAT 문자열 안에 몇번째 문자인지를 char 형으로 가지고옴 add 가 저장 문자열n 뒤집기까지 return arrInt.stream().mapToInt(i->i).toArray(); // mapToInt = Interger 를 int로 바꿔서 toArray 배열을 만들어줌 } } |
문제8은 사실 엄청 쉬운 문제였다
하지만 나는 제한조건의 함정에 빠져버렸다
밑의 제한 조건을 로직으로 짜는데
이것까지 고려할 필요가 없었던 것이다.
제한조건
1) s의 길이는 1이상 5이하
2) s의 맨앞에는 부호(+,-)가 올 수 있습니다
3) s는 부호와 숫자로만 이루어져잇습니다
4) s는 "0" 으로 시작하지 않습니다.
문제8 문자열을 정수로 바꾸기 |
문제 설명
문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.
|
class Solution { public int solution(String s) { int answer = 0; return Integer.parseInt(s); } } |
문제9 정수 제곱근 판별 |
문제 설명
임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요. |
class Solution { // input // long n // // 계산 // 예) 11의 제곱은 121 이므로 제곱근=11 11은 x 121은 x 제곱 // // output // n 제곱근 = x+1의 제곱 // n != 제곱근 = -1 public long solution(long n) { long answer = 0; long x = (long)Math.sqrt(n); // n의 제곱근 if (x * x == n) { // 실수인지 정수인지 판별 answer = (long) Math.pow((x + 1), 2); } else { answer =-1; // -1 리턴 } return answer; } } |
문제10 정수 내림차순으로 배치하기 |
문제 설명
함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.
제한 조건 |
import java.util.Arrays; import java.util.Collections; class Solution {. // input // n // // 계산 // 숫자 -> 문자열 String.valueOf // 배열 사용 // 문자열 ->숫자 // // output // n의 각자리수를 큰것부터 작은순으로 정렬한 정수 public long solution(long n) { long answer = 0; String str = Long.toString(n); // 숫자->문자열 String [] list = str.split(""); // .split("") 특정 문자열을 분리해서 배열로 만듬 Arrays.sort(list, Collections.reverseOrder()); // 내림차순 정렬 str = String.join("", list); // 분리한 문자열을 하나의 문자열로 만듬 answer = Long.parseLong(str); return answer ; } } |
문제11 하샤드 수 |
문제 설명
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
|
class Solution { public boolean solution(int x) { boolean answer = true; int sum=0; String numStr = String.valueOf(x); // 숫자를 문자열로 변경 12를 "12"로 변경 String [] str = numStr.split(""); // 문자열을 나누어 배열에 저장 ["1", "2"] for (String num : str){ sum+= Integer.parseInt(num); // 문자열을 숫자로 변환 if (x%sum==0){ answer = true; }else { answer = false; } } return answer; } } |
문제12 두 정수 사이의 합 |
문제 설명
두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다. |
class Solution { // input // int a, int b // // 계산 // a=3 , b= 5 // 3+4+5=12 // // output // //answer = a와 b 사이에 속한 정수의 합을 리턴 public long solution(int a, int b) { long answer = 0; int max = Math.max(a, b); int min = Math.min(a, b); for (int i=min; i<=max; i++){ answer += i; } return answer; } } |
'항해99' 카테고리의 다른 글
23.08.21 항해 99 16기 프로그래밍 기초2 3일차 (0) | 2023.08.21 |
---|---|
23.08.14~08.20 항해 99 16기 1주차 회고록 (0) | 2023.08.20 |
23.08.18 항해 99 16기 프로그래밍 기초2 1일차 (0) | 2023.08.18 |
23.08.17 항해 99 16기 프로그래밍 기초1 4일차 (0) | 2023.08.17 |
23.08.16 항해 99 16기 프로그래밍 기초1 3일차 (0) | 2023.08.16 |