반응형

 

STS3에서 MVC Project를 찾을 수 없음(STS MVC Project invalid thread access, org.springframework.samples.mvc failed)

2월 이후 STS3 버전을 다운로드 받고 워크스페이스를 변경하면 Spring MVC Project를 찾을 수 없는 현상이 발생했습니다.

일부 블로그에서는 워크스페이스\.metadata\.plugins\org.springsource.ide.eclipse.commons.content.core에 https-content.xml을 작성하면 MVC Project를 생성할 수 있다는 글도 있지만, 프로젝트 생성 시 보이기는 하지만 만들수는 없는 현상이 발생 했습니다.

※ https-context.xml을 넣어서 프로젝트를 생성할 때 MVC Proejct를 보이게끔 해주어야 합니다. 해당 파일은 이후 업로드 예정입니다. 
※ 기존에 사용하던 프로젝트가 있으신 분들은 https-context.xml을 가져와서 넣으시면 됩니다.

 

Spring 홈페이지나 여러가지 레퍼런스들을 찾아봣지만 그렇다할 오피셜은 없었습니다. https-content.xml을 봣을 때 MVC Project를 다운로드 받기 위한 URL을 어떠한 이유로 차단하고 있거나, 더이상 서비스하지 않는것으로 추측됩니다. (이슈로 인해 잠시 안되는 것인지, MVC Project에 대한 지원이 아예 종료된것인지는 확인이 되지 않습니다.)

https-content.xml

 

URL을 통해 다운로드를 받아오지 않고 아래에 배포한 zip 파일을 직접 워크스페이스\.metadata\.sts\content\org.springframework.templates.mvc-3.2.2에 넣음으로써 해결할 수 있습니다.

 

※ 해당 zip 파일에 있는 내용은 이전에 작업하셨던 프로젝트가 있다면 해당 경로에 찾아가면 있습니다. 기존 프로젝트가 있으신 분이라면 워크스페이스\.metadata\.sts\content\org.springframework.templates.mvc-3.2.2 경로로 이동하여 파일들을 새로운 워크스페이스 경로에 넣으시면 됩니다.

 

org.springframework.templates.mvc-3.2.2.zip
0.01MB

 

반응형
반응형

 

문제 링크 : https://www.acmicpc.net/problem/1764

 

[백준] 1764번: 듣보잡 (실버4, 자료 구조, 문자열, 정렬해시를 사용한 집합과 맵, JAVA)

해당 문제는 N과 M의 중복 개수와 이름을 출력하는 문제입니다. (중복 개수 출력을 못봐서 두 개의 케이스로 풀었습니다..)

 

1. getOrDefault를 사용한 풀이

getOrDefault는 지정된 값을 찾아서 없다면 기본값을, 있다면 값에 1을 더하여 사용했습니다. map.put(name, map.getOrDefault(name,0) +  1);  으로 사용을 했는데 name값이 있다면 value를 1 증가 시키고 없다면 기본값(0)을 반환시키도록 하는 함수입니다.

보도 못한(M) 사람을 입력받고 해당하는 키가 있다면 값을 1 증가, 증가된 값이 2라면 중복되는 값이기 때문에 list에 넣습니다. 이후 Collections.sort를 사용하여 듣보잡 리스트(list)를 정렬시키고 list의 사이즈와 요소를 출력합니다.

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] input = br.readLine().split(" ");
        int N = Integer.parseInt(input[0]);
        int M = Integer.parseInt(input[1]);
        Map<String, Integer> map = new HashMap<>();
        List<String> list = new ArrayList<>();

        for (int i = 0; i < N; i++) {
            String name = br.readLine();
            map.put(name, 1);
        }
        
        for (int i = 0; i < M; i++) {
            String name = br.readLine();
            map.put(name, map.getOrDefault(name,0) +  1);
            if (map.get(name) == 2) {
            	list.add(name);
            }
        }
        
        Collections.sort(list);
        System.out.println(list.size());
        for(String s : list) {
        	System.out.println(s);
        }
    }
}

 

2. containsKey를 사용한 풀이

containsKey는 해당하는 키가 있는지 확인해주는 함수입니다. 두번째 for문에서 containsKey를 사용하여 입력받은 값이 현재 map의 키에 있는지 확인하고, 있다면 names 리스트에 추가합니다.

이후 모두 구했다면 듣보잡은 names 리스트에 추가되어 있으므로 정렬 후 사이즈와 요소를 출력합니다. 

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] input = br.readLine().split(" ");
        int N = Integer.parseInt(input[0]);
        int M = Integer.parseInt(input[1]);
        Map<String, Integer> nameCountMap = new HashMap<>();
		List<String> names = new ArrayList<>();
        
        for (int i = 0; i < N; i++) {
            String name = br.readLine();
            nameCountMap.put(name, 0);
        }
        
        for (int i = 0; i < M; i++) {
            String name = br.readLine();
            if (nameCountMap.containsKey(name)) {
            	names.add(name);
            }
        }
        
        Collections.sort(names);
        System.out.println(names.size());
        for(String s : names) {
        	System.out.println(s);
        }
    }
}

 

반응형
반응형

 

문제 링크 : https://www.acmicpc.net/problem/1526

 

1526번: 가장 큰 금민수 (브론즈1, 수학, 구현, 브루트포스 알고리즘, JAVA)

수를 하나 입력받고, 4와 7로만 이루어진 숫자의 최댓값을 구하는 문제입니다. 전체 코드는 아래와 같은데, 값을 입력받은 후 해당 숫자를 char 배열로 변환합니다.

이후 각각의 char 배열에 7또는 4가 있는지 확인하고 count를 증가시키게 되는데, count가 char 배열의 길이와 같을 경우 모든 값이 4또는 7로 이루어진 문자이기 때문에 출력 후 종료합니다.

만약, 같지 않다면 입력받은 값(N)에서 1씩 감소시키며 원하는 값을 찾을때까지 반복합니다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

   public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        while(true) {
           char[] ch = Integer.toString(N).toCharArray();
           int count = 0;
           for(int i=0; i<ch.length; i++) {
              if(ch[i] == '7') {
                 count++;
              } else if(ch[i] == '4') {
                 count++;
              }
           }
           
           if(count == ch.length) {
              System.out.println(N);
              break;
           }
           
           N--;
        }
   }
}

 

반응형
반응형

 

문제 링크 : https://www.acmicpc.net/problem/1417

 

1417번: 국회의원 선거 (실버5, 구현자료, 구조그리디, 알고리즘시뮬레이션, 우선순위 큐, JAVA)

매수해야하는 사람의 수를 구하는 문제인데, 예제의 경우 다솜(5)이가 2번과 3번의 사람을 한명씩 매수하게 되면 득표 수가 7,6,6이 되므로 두명을 매수해야하기 때문에 출력값은 2가 나와야 합니다.

 

아래의 코드에서 각각의 값을 입력받고, 한명의 후보밖에 없을 경우(입력되는 값이 1일 때) 0을 출력합니다.

public class Main {

   public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int[] numbers = new int[N];
        int maxValue = 0;
        int count = 0;
        int maxIndex = 0;
        for(int i=0; i<N; i++) {
           numbers[i] = Integer.parseInt(br.readLine());
        }
        
        if(N==1) {
           System.out.println("0");
        }
	}
}

 

그 후 while문을 작성하는데, N이 1보다 클 경우 라는 조건식을 주고 나서 입력받은 숫자 중 가장 큰 값과 현재 값의 인덱스를 저장합니다. 그 후 numbers[0] (다솜)이 maxValue보다 클 경우 count를 출력하며 while문을 중지하고, 작거나 같을 경우 다솜이의 값을 1 증가, 가장 큰 값이였던 인덱스에 들어있는 값과 maxValue를 1 감소하며 count를 증가 시킵니다.

        while(N>1) {
           
           for(int i=1; i<N; i++) {
               if(numbers[i] > maxValue) {
                  maxValue = numbers[i];
                  maxIndex = i;
               }
            }
           
           if(numbers[0] > maxValue) {
              System.out.println(count);
              break;
           } else if(numbers[0] <= maxValue) {
              numbers[0]++;
              numbers[maxIndex]--;
              maxValue--;
              count++;
           } 
        }

 

전체 코드는 아래와 같습니다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

   public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int[] numbers = new int[N];
        int maxValue = 0;
        int count = 0;
        int maxIndex = 0;
        for(int i=0; i<N; i++) {
           numbers[i] = Integer.parseInt(br.readLine());
        }
        
        if(N==1) {
           System.out.println("0");
        }
        
        while(N>1) {
           
           for(int i=1; i<N; i++) {
               if(numbers[i] > maxValue) {
                  maxValue = numbers[i];
                  maxIndex = i;
               }
            }
           
           if(numbers[0] > maxValue) {
              System.out.println(count);
              break;
           } else if(numbers[0] <= maxValue) {
              numbers[0]++;
              numbers[maxIndex]--;
              maxValue--;
              count++;
           } 
        }
   }
}

 

반응형

+ Recent posts