몇 블로그 설명이 내가 생각하는 풀이와 설명이 다른것 같아서 기초부터 따로 정리했다.

 

- 소수란) "1보다 큰" 자연수 중 1과 자기 자신만을 약수로 가지는 수다
- 소수판정 방법)
소수 판별을 위해 n의 제곱근까지만 확인하면 된다.
즉, n자리수의 값X를을  i=1 ~ X의 제곱근까지 for loop를 돌려서 if( X%i == 0 ) 이 true이 나오면 소수가 아니다.

for (int i=2; i<=Math.sqrt(num); i++) {
    if (num % i == 0) return false;
}

이 이유는 소수는 1과 자기자신을 제외한 수로 나눠지면 안된기 때문이다.

 

소수 찾기는 에라토스테네스의 체라는 방법이 있고 시간복잡도는 O(nloglogn)를 가진다.
N=10^8인 경우, 이는 4초가 걸려 2초 안에 해결할 수 없을 뿐더러, 애초에 처음부터 배열 선언시에 메모리 초과가 뜰것이다. 
소수판별 방법을 위해 에라토스테네스를 사용하지 않도록 한다.

에라토스테네스는 1~N 자리수의 값까지의 모든 수를 판별한다. O(nloglogn). 
N의 사이즈가 너무 커서, 이 대신, 제곱근까지만 확인하는  위의 소수판정 방법을 사용한다. 

 

백준 신기한 소수 문제는 주어진 N 자리수의 가능한 모든 소수를 찾는것이다.
주의점은 단순하게 각 자리에 소수가 있다고 해당 숫자가 소수는 아니다.
ex) 1333 의 약수는 1, 31, 43, 1333 이다. 
그래서, 완전탐색으로 모든 경우의 수를 구한다. 
즉, 각 자리에 0~9의 숫자를 추가하여 N자리수만큼 만드는 모든 조합을 만들고, 해당 값의 위 소수판정 방법을 사용한다. 

public static void getResult(int output, int n) {
        if (n == 0) {
            if (isPrime(output)) sb.append(output).append("\n");
            return;
        }
        for (int i=0; i<10; i++) {
            int next = output*10+i;
            if (isPrime(next)) getResult(next, n-1);
        }
    }

 

그럼, N=4 인 경우, 값이 0000 부터 시작한다. 

소수의 정의에 따라, 2 이상인 값만 처리할 수 있도록 2이하인 값은 건너뛰도록 한다. ( ex. 0,1 )

2 이상인 값들만 소수 판정하여 맞다면 true를 반환하여 해당 값을 StringBuilder에 추가하고 마지막에 모든 값들을 출력해주면 답이 완성된다. 

public static boolean isPrime(int num) {
        if (num < 2) return false;

        for (int i=2; i<=Math.sqrt(num); i++) {
            if (num % i == 0) return false;
        }
        return true;
}

 

최종코드)

* 코드 출처: https://velog.io/@jslog/BOJ-백준-2023번-신기한-소수-자바-JAVA-1

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

public class Main {
    public static StringBuilder sb = new StringBuilder();
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        getResult(0,n);
        System.out.println(sb);
    }

    public static void getResult(int output, int n) {
        if (n == 0) {
            if (isPrime(output)) sb.append(output).append("\n");
            return;
        }
        for (int i=0; i<10; i++) {
            int next = output*10+i;
            if (isPrime(next)) getResult(next, n-1);
        }
    }

    public static boolean isPrime(int num) {
        if (num < 2) return false;

        for (int i=2; i<=Math.sqrt(num); i++) {
            if (num % i == 0) return false;
        }
        return true;
    }

}

이번에 c++ 라이브러리 함수 중 substr() 을 공부하면서 문득 함수 문법?을 해석하는 방법이 궁금해졌다....

basic_string substr( size_type pos = 0, size_type count = npos ) const;

이렇게 적혀있는데 항상 뭔뜻인지도 이해 못하고 넘어갔던 수 많은 날들...

 

1) 일단 앞의 basic_string은 당연히 return type을 뜻한다.

2) substr() 함수는 안에 보면 comma를 기준으로 2개의 인자를 넘겨 받는다. 

size_type은 각 인자 타입을 나타낸다.

그리고, pos = 0, count = npos 의 뜻은 아래와 같다. 

=> default 기본값이 pos는 0, count는 npos(스트링의 맨 끝 인덱스값)으로 설정이 된다는 뜻이다.

그래서, 두번째 인자 값을 넘겨주지 않으면 첫번째 인자값 인덱스 부터 맨 끝까지를 char배열에서 추출하겠다는 뜻이다. 

 

3) 마지막으로 const는 해당 함수가 "const 멤버 함수"라는 뜻이다. 

즉, const 멤버함수라는 뜻이 해당 함수 내에서 String 객체의 멤버변수를 사용할 때, 참조만 할 수 있고 수정하지 못하게 하는 겁니다. (mutable 제외)

참조: https://thinkpro.tistory.com/141

 

 

 

 

 

전정부 jsp를 살펴보다가 searchVO 모델 객체가 사용되고 있어서 어떻게 사용되고 있는지 문득 궁금해졌다. 

model.addAttribute() 함수를 통해서만 객체가 VIEW 단으로 넘겨지는 줄로만 알고 있는 상황이었기 때문이다. 

 

결론은 @ModelAttribute("searchVO") BoardVO boardVO 이렇게 받는다면 BoardVO 객체에 담긴 변수들과 이름이 맞다면 자동으로 setter를 통해 값들을 담아주고 마지막에 model.addAttribute를 따로 할 필요없이 자동으로 View단으로 넘겨주게 된다.

 

즉, boardVO객체를 매핑받아서 searchVO라는 다른 이름으로 view단에서 사용할 수 있고, 또 boardVO객체에 다른 정보들을 담아서 articleVO라는 이름으로도 활용할 수 있도록 하는것이다.

=> model.addAttribute("articleVO", boardVO);

 

 

참고 출처: OKKY ; EastGlow님 답변 
https://okky.kr/article/563793

SearchVO 객체에 담긴 변수들과 이름이 맞다면 자동으로 set해줘서 담아주고 마지막에 model.addAttribute를 따로 할 필요없이 자동으로 View단으로 넘겨주게 됩니다. 한마디로 넘어온 파라미터의 변수명만 SearchVO 안에 있는 애들과 맞다면 자동으로 searchVO에 담아주고 View단으로 넘겨주는 역할이라 할 수 있을 거 같네요.

 

Eclipse 에러

 

Missing Maven dependencies in Eclipse project  +

The import org.slf4j cannot be resolved (포함)

 

 

무슨 이유인지 모르겠으나, 실수로 키를 잘못 눌러서 갑자기 프로젝트에 에러가 생겼다.

(갑자기 maven 프로젝트가 비-maven 프로젝트로 바뀌었다..?!) 

 

해결 방법)

-> 프로젝트 우클릭 -> CONFIGURE -> CONVERT TO MAVEN PROJECT 하면 해결됨...

 

 

만약 그래도 해결이 안되면, :

Missing Maven dependencies in Eclipse project 라고 뜨길래 구글링을 해보니 다음과 같은 해결법을 찾았다.

 

에러 이유:

아래 사진과 같이 MAVEN DEPENDENCIES 가 빠진것을 확인해볼 수 있다.

1) Eclipse 프로젝트의 루트에서 .classpath 파일을 연다.

2) 파일에 다음 항목을 삽입한다.

<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
            <attribute name="org.eclipse.jst.component.nondependency" value=""/>
        </attributes>
</classpathentry> 

그런 다음 Eclipse에서 프로젝트를 다시 빌드한다.(Project->Clean). 이제 라이브러리 탭에서 프로젝트의 Java 빌드 경로에서 포함된 Maven 종속성을 확인할 수 있다.

 

 

 

(21/11/03 추가) 

war파일을 만들고 나서 톰캣을 돌리면 가끔 cannot be resolved 에러가 발생하는데 

maven update하면 해결 된다. build path 바꿔서 해결하라고 하는데 전혀 아니다. 그냥 maven update 하시라. 

 

-----

 

참고 사항: 개인 메모 입니다.

 

바로 아래 블로그에서 참고할 때 주의할 점은 밑에 서 filzilla에 연결할때 

호스트: xxx.kr 이런 형식이다. 즉, 말 그대로 호스팅 웹 도메인 주소말이다. 

그리고 ROOT.war이런 형식으로 올리면 된다. 

 

https://velog.io/@woo0_hooo/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%B9%B4%ED%8E%9824%EC%97%90%EC%84%9C-%ED%98%B8%EC%8A%A4%ED%8C%85%ED%95%98%EA%B8%B0

 

[스프링부트] 프로젝트 카페24에서 호스팅하기

스프링부트 프로젝트를 카페24에서 호스팅하는 방법은~!?

velog.io

https://want-to-be-coding-master.tistory.com/75

https://vip00112.tistory.com/28

 

Java: Cafe24 단독 Tomcat 호스팅 서버에 WAR 배포시 주의사항

이클립스로 개발한 웹프로젝트를 실제 호스팅 서버에 WAR 배포시 주의사항 1. WAR 파일을 tomcat/webapps 아래로 이동 - WAR 파일명은 ROOT.war로 변경하여 이동 2. tomcat/conf/sever.xml의 해당 웹프로젝트의 C.

vip00112.tistory.com

 

 

그냥 skip해도 되는 내용: 

https://juyoungit.tistory.com/236

에러 내용:

Failed to parse mapping resource: 'file [/Users/jinwoolee/Documents/workspace-spring-tool-suite-4-4.8.1.RELEASE/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/youtubeAPI/WEB-INF/classes/mappers/classes-mapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [/Users/jinwoolee/Documents/workspace-spring-tool-suite-4-4.8.1.RELEASE/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/youtubeAPI/WEB-INF/classes/mappers/classes-mapper.xml]'.

 

필자는 스프링 내에서 브랜치를 오가며 master 브랜치와 jinwoo3 브랜치를 switch to 해주면서 작업을 하다보니 톰캣에 에러가 생겨서 발생한 문제였다.

 

문제 내용을 보면,  mappers/classes-mapper.xml 에 classes-mapper.xml 파일에 내 브랜치에 없는데 자꾸 톰캣이 mapping을 해주려고 해서 발생한 문제였다. 아니 왜 내 브랜치에 없는데 이러는거지?? 했는데 역시나 master 브랜치에 있는것이었다. 그래서 위 주소로 직접 찾아가보았다. 

 

(역시나 master브랜치에 있는 놈이었군... 왠지 모르게 톰캣에 찌꺼기가 남은것 처럼 저게 남아있던거임)

 

 

그래서 검색:

.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps 라고 하니,

https://ninearies.tistory.com/102

 

[에러] Could not delete 경로/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/myweb/storage. May be locked by

에러 메세지 Could not delete 경로/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/myweb/storage. May be locked by another process. 해결 방법 1. Server의 톰캣 우클릭 → 아래와 같은 'C..

ninearies.tistory.com

이 블로그님께서 톰캣을 Servers에서 우클릭-> working directory clean + clean을 해주라고 해서 했더니, 사라짐요.... 

 

그래서 결국 해결함...!

'스프링 에러 모음집' 카테고리의 다른 글

Missing Maven dependencies in Eclipse project  (0) 2022.01.14

2021/7/22 :

 

왜 인지 모르겠으나, JSTL안에서 <script> 태그 안에 javascript함수를 호출하려고 할때에는 2가지를 유의해야 한다.

1. use backticks : [else, it wont work]

2. function resultsLoop should come before it is called in the jsp page. 

저 자바스크립트 함수가 위에 있어야 함수를 인식할 수 있음. 그래서 closing </head> 안에 넣어줬음. 

내가 알기론 page 로딩 순서가 있음. (head -> Dom -> 등등?? )

 

 

사진에서 볼 수 있듯이, 나는 var limit = .... 이렇게 하는 바람에 계속 이상하게 limit이 적용이 안되서 validation을 제대로 작동시키지 못해서 한참 헤맸었다. 역시... 문법 부터 기본적으로 잘 알고 있어야 삽질을 안하지... 휴,,, 

+ Recent posts