리나의 개발로그

PROGRAMMERS 서울에서 김서방 찾기

|

출처

문제출처 - PROGRAMMERS 코딩테스트 - 서울에서 김서방 찾기

문제

String형 배열 seoul의 element중 Kim의 위치 x를 찾아, 김서방은 x에 있다는 String을 반환하는 함수, solution을 완성하세요. seoul에 Kim은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.

제한 사항

  • seoul은 길이 1 이상, 1000 이하인 배열입니다.
  • seoul의 원소는 길이 1 이상, 20 이하인 문자열입니다.
  • Kim은 반드시 seoul 안에 포함되어 있습니다.

제출한 답안

class Solution {
  public String solution(String[] seoul) {
      String answer = "";
      for(int i = 0; i < seoul.length; i++){
          if(seoul[i].equals("Kim")){
              answer = "김서방은 " + i + "에 있다";
          }
      }
      return answer;
  }
}

다른 사람 풀이

public String findKim(String[] seoul){
        //x에 김서방의 위치를 저장하세요.
        int x = 0;
    while(x<seoul.length){
      if(seoul[x] == "Kim")
        break;
      else x++;
    }


        return "김서방은 "+ x + "에 있다";
    }

포인트

  • String을 비교할 때는 ==이 아니라 .equals()를 사용!(계속 안되서 왜지 왜지 생각하다가 퍼뜩 떠올랐다.)
  • while을 써서 break;를 쓰면 찾는 순간 탐색을 그만하니까 시간이 더 줄어들 것 같다.
  • int x = Arrays.asList(seoul).indexOf(“Kim”); 방식으로 찾는 것도 보았는데, list로 바꾸지는 않아도 될 것 같지만 이런 방식도 있다! 정도로 알아두는 것도 좋을 듯.

PROGRAMMERS 직사각형 별찍기

|

출처

문제출처 - PROGRAMMERS 코딩테스트 - 직사각형 별찍기

문제

이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다. 별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.

제한 조건

  • n과 m은 각각 1000 이하인 자연수입니다.

제출한 답안

public class Solution {
    public static void main(String[] args) {
        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++) {
                System.out.print("*");
            }
            System.out.println();
        }
        sc.close();
    }
}

포인트

  • 트리 찍기 느낌의 문제. for문을 사용하면 간단하게 풀 수 있는 문제였다.

PROGRAMMERS 수박수박수박수박수박수?

|

출처

문제출처 - PROGRAMMERS 코딩테스트 - 수박수박수박수박수박수?

문제

길이가 n이고, 수박수박수박수….와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 수박수박을 리턴하고 3이라면 수박수를 리턴하면 됩니다.

제한 조건

  • n은 길이 10,000이하인 자연수입니다.

제출한 답안

class Solution {
  public String solution(int n) {
      String a = "수";
      String b = "박";
      
      String answer = "";
      
      if(n%2==0){
          for(int i = 1; i <= n/2; i++){
              answer += a;
              answer += b;
          }
      } else {
          for(int i = 1; i <= (n-1)/2; i++){
              answer += a;
              answer += b;
          }
          
          answer += a;
      }
      return answer;
  }
}

모범 답안 1

public String solution(int n){
    return new String(new char [n/2+1]).replace("\0", "수박").substring(0,n);
}

모범 답안 2

public String solution(int n){
    String result = "";
    for (int i = 0; i < n; i++)
      result += i % 2 == 0 ? "수" : "박";
        return result;
}

포인트

출처 : https://jhnyang.tistory.com/122

PROGRAMMERS 가운데 글자 가져오기

|

출처

문제출처 - PROGRAMMERS 코딩테스트 - 가운데 글자 가져오기

문제

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

제한사항

  • s는 길이가 1 이상, 100이하인 스트링입니다.

제출한 답안

class Solution {
  public String solution(String s) {
      int l = s.length();
		String answer = "";
		
		if(l%2==1) {
			s.substring((l-1)/2, (l-1)/2+1);
			answer = s.substring((l-1)/2, (l-1)/2+1);
		} else {
			s.substring(l/2-1, l/2+1);
			answer = s.substring(l/2-1, l/2+1);
		}
		
	    return answer;
  }
}

모범 답안

class Solution {
  String solution(String word){
    return word.substring((word.length()-1) / 2, word.length()/2 + 1);
  }
}

포인트

  • if로 경우를 나누지 않아도 한 줄로 substring을 써서 나타날 수 있음

Jekyll 블로그 로컬에서 시작할 때 버전 호환 이슈 해결 방법

|

jekyll로 블로그를 로컬에서 돌려보려 할 때, 아래와 같은 Error 메시지를 볼 때가 있다.
이것은 jekyll 버전 호환 문제가 발생하여 나타나는 현상으로 보인다.

You have already activated jekyll 3.8.6, but your Gemfile requires jekyll 3.8.5. Prepending `bundle exec` to your command may solve this. (Gem::LoadError)

이는 bundler를 사용하면 쉽게 해결할 수 있다.
아래 명령어로 설치와 실행을 하면 된다.

gem install bundler
bundle install
bundle exec jekyll serve

나는 항상 블로그를 로컬에서 돌릴 때 마지막 명령어로 돌리고, 그 결과 나오는 주소로 들어가 확인해본다.