본문 바로가기
알고리즘

[Algorithm] 5월30일 알고리즘 연습

by eigen96 2022. 5. 30.
728x90

Lv. 1 수박수박수박수박수박수? -성공(난이도 : 매우쉬움)

import java.io.*;
import java.util.*;

class Solution {
    
    StringBuilder sb = new StringBuilder();
    public String solution(int n) {
        
        String answer = "";
        for(int i = 1; i <=n ;i++){
            if(i % 2 == 1) sb.append("수");
            if(i % 2 == 0) sb.append("박");
        }
        answer = sb.toString();
        return answer;
    }
}

 

 

Lv. 1 문자열을 정수로 바꾸기 - 성공 (난이도 : 매우쉬움)

class Solution {
    public int solution(String s) {
        
        int a = Integer.parseInt(s);
        int answer = a;
        return answer;
    }
}

 

 

 

Lv. 1 시저 암호 - 실패 

https://programmers.co.kr/learn/courses/30/lessons/12926

 

코딩테스트 연습 - 시저 암호

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀

programmers.co.kr

복습할 내용 : char 변환 

알파벳 26개

if(ch>='a' && ch<='z') { //소문자
				if(ch+n > 'z') {
					answer += (char)(ch-26+n);
				}else {
					answer += (char)(ch+n);
				}
			}else if(ch>='A' && ch<='Z') { //대문자
				if(ch+n > 'Z') {
					answer += (char)(ch-26+n);
				}else {
					answer += (char)(ch+n);
				}
			}

출처: https://ivory-room.tistory.com/23 [개발로 자기개발:티스토리]

https://ivory-room.tistory.com/23

 

[프로그래머스 Lv.1] 시저암호 java

문제설명 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 AB는 1만큼 밀면 BC가 되고, 3만큼 밀면 DE가 됩니다. z는 1

ivory-room.tistory.com

 

 

 

Lv. 1 약수의 합 - 성공( 난이도 : 매우쉬움)

class Solution {
    public int solution(int n) {
        int answer = 0;
        
        for(int i = 1; i <= n ; i++){
            if(n % i == 0){
                answer = answer + i;
            }
        }
        return answer;
    }
}

 

 

 

 

복습 필요한 내용 :

알파벳 대문자(A~Z)는 65번~90번, 소문자(a~z)는 97번에서 122번

마지막 문자 지우기

sb.deleteCharAt(sb.length()-1);

이상함 : 끝에 공백이 있는 경우 예외처리...

실수 : str.toUpperCase()만으로는 자체적으로 바뀌지 않음.

String st = str.toUpperCase()로 변경된 내용을 따로 변수에 담아서 진행.

import java.util.*;
import java.io.*;
    
class Solution {
    
    StringBuilder sb = new StringBuilder();
    public String solution(String s) {
        String answer = "";
        
        String[] arr = s.split(" ");
        for(String str : arr){
            //toLowerCase()
            //toUpperCase()
            //subString()
            //charAt()
            String st = str.toUpperCase(); // 일단 대문자로 치환
            char[] charArray = st.toCharArray();
            for(int i = 0; i < charArray.length; i++){
                //소문자로 치환.
                if(i % 2 == 1) charArray[i] = (char)((charArray[i] % 'A') + 'a'); 
            }
            for(char result : charArray){
                sb.append(result);
            }
            sb.append(" ");
        }
        if(s.charAt(s.length()-1) != ' '){
            sb.deleteCharAt(sb.length()-1);
        }
        
        
        answer = sb.toString();
        return answer;
    }
}

 

 

https://haruple.tistory.com/201

 

[프로그래머스/JAVA] 이상한 문자 만들기

안녕하세요, 하루플 입니다😀 프로그래머스 이상한문자 만들기 문제입니다. 문제 문자열 s는 한개 이상의 단어로 구성되어있다. 각 단어는 하나 이상의 공백 문자로 구분되어있다. 각 단어의

haruple.tistory.com

아래와 같이 자체적으로 String배열로 만든후  가능.

class Solution {
        
        
          
              public String solution(String s) {
        
        
          
                  String answer = "";
        
        
          
                  String[] str = s.split("");
        
        
          
                  
        
        
          
                  int idx = 0; //인덱스
        
        
          
                  for(int i=0; i<str.length; i++){
        
        
          
                      if(str[i].equals(" ")){ //띄어쓰기 있다면
        
        
          
                          idx = 0; //인덱스 0 초기화
        
        
          
                      }
        
        
          
                      else if(idx % 2 == 0){ //idx가 짝수면
        
        
          
                          str[i] = str[i].toUpperCase(); //대문자로 변경
        
        
          
                          idx++; //idx 증가
        
        
          
                      }
        
        
          
                      else if(idx % 2 != 0){ //idx가 홀수면
        
        
          
                          str[i] = str[i].toLowerCase(); //소문자로 변경
        
        
          
                          idx++; //idx 증가
        
        
          
                      }
        
        
          
                      answer += str[i];
        
        
          
                  }
        
        
          
                  return answer;
        
        
          
              }
        
        
          
          }

출처: https://haruple.tistory.com/201 [하루플스토리:티스토리]

 

 

 

Lv. 1 자릿수 더하기 - 성공

import java.util.*;
import java.io.*;

public class Solution {
    public int solution(int n) {
        int answer = 0;

        while(n > 0){
            answer = answer + n % 10; //처음 1의자리 더하기 6
            //더한 후 1의자리 없애기 12
            n = n/10; // 12
        }

        return answer;
    }
}

 

 

 

 

 

 

Lv. 1 콜라츠 추측 - 성공 

복습할 내용 : 결과는 int지만 계산과정중에 long이 필요하다는 것을 간과하여 시간낭비. 

import java.util.*;
import java.io.*;

class Solution {
    static int numbering = 0;
    static int input = 0;
    public int solution(int num) {
        
        if(num == 1){
        
            return 0;
        }
        long input = num;
        while(input >= 1){
            
            if(input == -1){
                return -1;
            }
            if(input == 1){
                return numbering;
            }
            input = collatz(input);
            
            if(input == -1){
                return -1;
            }
            if(input == 1){
                return numbering;
            }
        }
        
        return numbering;
    }
    
    public long collatz(long n){
        if(n == 1){
            return 1;
        }
        if(numbering >= 499){
            return -1;
        }
        
        numbering++;
        
        if(n % 2 == 0){
            n = n/2;
            return n;
        }else{
            n = (n*3) + 1;
            return n;
        }
        
    }
}

 

Lv. 1 하샤드 수 - 성공

복습할 내용 : (실수) %를 &라고 작성하여 한동안 시간낭비

class Solution {
    public boolean solution(int x) {
        
        int total = 0;
        int a = x;
        //자리수 합 구학.
        int input = x;
        while(input > 0){
            total = total + (input % 10);
            
            input = input / 10;
        }
        
        if(a % total == 0 ){
            return true;
        }else{
            return false;
        }
        
        
        
    }
}

 

Lv. 1 핸드폰 번호 가리기 - 성공(subString (X) -> substring(O))

실수

 

import java.io.*;
import java.util.*;

class Solution {
    StringBuilder sb = new StringBuilder();
    public String solution(String phone_number) {
        String answer = "";
        String st = phone_number;
        String front = st.substring(0,st.length()-4);
        String back = st.substring(st.length()-4,st.length());
        
        for(int i = 0 ; i < front.length() ; i++){
            sb.append("*");
        }
        sb.append(back);
        answer = sb.toString();
        return answer;
    }
}

 

Lv. 1 x만큼 간격이 있는 n개의 숫자 - 성공(난이도 : 매우쉬움)

 

class Solution {
    public long[] solution(int x, int n) {
        long[] answer = new long[n];
        long[] arr = new long[n+1];
        //첫 인덱스는 0
        for(int i = 1; i <= n ; i++){
            arr[i] = arr[i-1] + x;
        }
        for(int i = 0; i < n; i++){
            answer[i] = arr[i+1];
        }
        return answer;
    }
}

 

 

 

 

Lv. 1 직사각형 별찍기 - 성공

import java.util.Scanner;

class Solution {
    
    
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();

        for(int i = 0 ; i < b ; i++){
            for(int j = 0; j < a ; j++){
                sb.append("*");
            }
            sb.append("\n");
        }
        System.out.println(sb.toString());
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

댓글