오늘 공부한 것
* 알고리즘 문제풀이
* 3주차 강의 복습
* 3주차 강의 학습
오늘도 열심히 알고리즘을 풀었다
난이도는 점점 어려워졌다 문제자체가 이해안가는 부분들이 생겼고
그런만큼 어떤 코드를 사용해야 할지도 어려웠다
문제13 콜라츠 추측 |
문제 설명
1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.
1-1. 입력된 수가 짝수라면 2로 나눕니다. 1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. 2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다. |
class Solution { // input // num // // 계산 // num % 2 = 0 짝수 // num % 2 = 1 홀수 * 3 +1 // // output // 반복 횟수 // 반복 횟수== 500 일땐 -1 public int solution(long num) { int answer = 0; // 반복 횟수 while (num != 1) { if (num % 2 == 0) { //6 % 2=0 짝수 num /= 2; // 6/2 = 3 answer++; } else { num = num * 3 + 1; // 3*3+1= 10 answer++; } if (answer == 500) { answer=-1; break; } } return answer; } } |
문제14 서울에서 김서방 찾기 |
문제 설명
String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.
|
class Solution { // input // String [] seoul // // 계산 // 배열에서 특정 값 찾기 // for, if 사용 // // output // 배열상 "kim" 위치 // "김서방은 몇번째 위치에 있다" public String solution(String[] seoul) { String answer = ""; for(int i=0; i<seoul.length; i++) { if(seoul[i].equals("Kim")) { answer = "김서방은 " + i + "에 있다"; } } return answer; } } |
문제15 나누어 떨어지는 숫자 배열 |
문제 설명
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요. |
import java.util.ArrayList; import java.util.Arrays; class Solution { // input // 배열의 요소 // // 계산 // 배열에 있는 수를 랜덤 divisor 로 나눔 // 배열에 있는 수중 divisor로 나누어서 떨어지는 값을 배열로 리턴 // 예 [5,9,7,10] 중 divisor가 5일때 나누어 떨어지는 [5,10] 을 리턴 // int 배열을 list 로 변환필요 // 변환한 것을 % divisor == 0 일때 배열에 담기 // 0 이라면 -1 배열에 담기 // // output //divisor로 나누었을 때 떨어지는 원소를 배열로 리턴 public int[] solution(int[] arr, int divisor) { int[] answer = {}; ArrayList<Integer>list = new ArrayList<Integer>(); for (int i = 0; i < arr.length; i++) { if (arr[i] % divisor == 0) { //배열 값이 divisor로 나누어 떨어지면 list.add(arr[i]); //리스트 저장 } } if (list.size()==0){ // 리스트 크기가 0인경우 list.add(-1); // - 1 저장 } answer = new int[list.size()]; // 만든 list 크기 만큼 answer 생성 for(int i=0; i< list.size(); i++){ // list 값 answer에 복사 answer[i] = list.get(i); } Arrays.sort(answer);//answer를 오름차순 정렬 return answer; } } |
문제 16에서는 배열이 두개가 나왔다
int배열과 boolean 배열이 함께 나와서 고민이 많았다
이걸 변환을 해야하나? 라는 고민이었다
하지만 막상 해보니 변환하지 않아도 할 수 있어서 다행이었다
문제16 음양 더하기 |
문제 설명
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
|
class Solution { // input // 정수배열 absolutes // 정수배열의 부호를 담은 불리연 배열 signs // // 계산 // 배열끼리 대조해서 + 인지 -인지 확인 // 확인 후 SUM // // output // signs으로 부호 확인해서 absolutes의 합계 구하기 public int solution(int[] absolutes, boolean[] signs) { int answer = 0; for(int i=0; i<absolutes.length; i++){ if (signs[i]==true){ //부호 배열에서 true 면 + answer += absolutes[i]; } else { //부호배열에서 false 면 - answer -= absolutes[i]; } } return answer; } } |
문제 17에서는 전화번호의 뒷 4자리를 제외한 나머지 숫자를 * 로 바꿨어야 했다
뒷 4자리를 제외한 나머지 숫자를 어떻게 해야 하는가 고민이 많았는데
전체 길이에서 -4를 빼면 되는거였다 고민을 오래했는데 생각보다 쉬웠다..
문제17 핸드폰 번호 가리기 |
문제 설명
프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다.
전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요. |
class Solution { // input // 문자열 phone_number // // 계산법 // phone_number의 뒷자리 -4 만 숫자로 살리기 // // ouput // 뒷 4자리를 제외한 나머지 숫자를 *로 변환 public String solution(String phone_number) { String answer = ""; for (int i = 0; i < phone_number.length(); i++) { if (i < phone_number.length() - 4) { // phone_number의 길이에서 -4를 뺀수 answer += "*"; } else { answer += phone_number.charAt(i); } } return answer; } } |
문제 18에서의 고비는 배열에 없는 숫자를 찾아 더한 수를 표현하는것이었다
이걸 어떻게 해야할까 고민하다가 팀원에게 의논해보니
0~9까지 다 더한 45에서 for문으로 나오는 숫자를 계속 빼는게 어떻겠냐고 들었고
머리가 확 밝아지면서 해결할 수 있었다.
문제18 없는 숫자 더하기 |
문제 설명
0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.
|
class Solution { // input // int[] numbers // // 계산 // 0~9 다 더 하면 45 여기에서 있는 숫자를 뺀다 // 45 에서 배열에 있는 숫자를 for문으로 계속뺌 // // output // numbers에서 찾을 수 없는 0~9 까지 숫자의 sum // answer += ? public int solution(int[] numbers) { int answer = 45; for (int i=0; i<numbers.length; i++){ answer-=numbers[i]; } return answer; } } |
'항해99' 카테고리의 다른 글
23.08.23 항해 99 16기 프로그래밍 기초2 5일차 (0) | 2023.08.23 |
---|---|
23.08.22 항해 99 16기 프로그래밍 기초2 4일차 (0) | 2023.08.22 |
23.08.14~08.20 항해 99 16기 1주차 회고록 (0) | 2023.08.20 |
23.08.19 항해 99 16기 프로그래밍 기초2 2일차 (0) | 2023.08.19 |
23.08.18 항해 99 16기 프로그래밍 기초2 1일차 (0) | 2023.08.18 |