반응형

자연수 N이 입력되면 1부터 N까지의 소수의 개수를 출력하는 프로그램을 작성하세요.
만약 20이 입력되면 1부터 20까지의 소수는 2, 3, 5, 7, 11, 13, 17, 19로 총 8개입니다.
제한시간은 1초입니다.


▣ 입력설명
첫 줄에 자연수의 개수 N(2<=N<=200,000)이 주어집니다.

▣ 출력설명
첫 줄에 소수의 개수를 출력합니다.

▣ 입력예제 1
20

▣ 출력예제 1
8


내 풀이:

import sys
sys.stdin=open('H:/Study/CodingTest_Python/input.txt', 'rt')

n = int(input())
n_list = [0]*(n+1) #n_list[0] 에서 n_list[21] 까지 있는 리스트 생성 
cnt = 0

for i in range(2, n+1): #2에서 20까지
    if n_list[i] == 0: #n_list[2] 2가 0이면
        cnt += 1
        for j in range(i, n+1, i): #2의배수(n_list[2], [4], [6]...)
            n_list[j] = 1

print(cnt)

풀이 설명:
- n_list = [0]*(n+1) : n_list[0] 에서 n_list[n] 까지 있는 리스트 생성한다. 여기서 인덱스 값이 입력값 각각을 의미한다.
                          예를 들어, 입력값이 20이면 0에서 20까지의 리스트를 만든다고 생각하면 된다. 

- for i in range(2, n+1):  어차피 소수는 2부터니까 반복문을 2에서 입력값 까지 도는것으로 설정한다. 

- if n_list[i] == 0: 
        cnt += 1  : n_list[i]값이 0이면 카운트를 1씩 증가한다.
                       기본값을 0으로 설정했으므로 처음값인 n_list[2]는 카운트가된다.

- for j in range(i, n+1, i): 
            n_list[j] = 1  : i가 2라면 2의배수에 해당하는 인덱스는 모두 1이되고 3이라면
                              3의 배수에 해당하는 인덱스 모두 1이된다.

 

 

 

반응형

## K번째 큰 수

현수는 1부터 100사이의 자연수가 적힌 N장의 카드를 가지고 있습니다. 같은 숫자의 카드가
여러장 있을 수 있습니다. 현수는 이 중 3장을 뽑아 각 카드에 적힌 수를 합한 값을 기록하려
고 합니다. 3장을 뽑을 수 있는 모든 경우를 기록합니다. 기록한 값 중 K번째로 큰 수를 출력
하는 프로그램을 작성하세요.
만약 큰 수부터 만들어진 수가 25 25 23 23 22 20 19......이고 K값이 3이라면 K번째 큰 값
은 22입니다.

▣ 입력설명
첫 줄에 자연수 N(3<=N<=100)과 K(1<=K<=50) 입력되고, 그 다음 줄에 N개의 카드값이 입력
된다.

▣ 출력설명
첫 줄에 K번째 수를 출력합니다. K번째 수는 반드시 존재합니다.

▣ 입력예제 1
10 3
13 15 34 23 45 65 33 11 26 42

▣ 출력예제 1
143

============================================================================

풀이

N, K = map(int, input().split())
a = list(map(int, input().split()))

res =set()

for i in range(N):
    for j in range(i+1, N):
        for m in range(j+1, N):
            res.add(a[i]+a[j]+a[m])

#set()에는 sort가 없어서 다시 리스트로 변환한다.
res = list(res)
res.sort(reverse=True)
print(res[K-1])

참고 개념:
set() 함수
- set은 영어로 집합이라는 뜻, 중복되지 않은 원소를 얻고자 할때 사용
- set을 선언하고 그 안에 계속 추가하고 싶다면 .add()를 사용
  -> 반드시 하나의 숫자 혹은 글자, 문장 , 튜플만이 가능하다.

sort() vs sorted()

sort() 함수
는 리스트명.sort() 형식으로, "리스트형의 메소드" 이며 리스트 원본값을 직접 수정
sort()함수의 리턴값은 None
이므로 정렬된 값은 리턴되지 않는다.

sorted()함수는 sorted(리스트명) 형식으로 "내장 함수"이며 리스트 원본값은 그대로이고 정렬값을 반환

 

반응형

강의를 1개라도 수강하는 학생에게는 수강 강의를 보여주고
수강하는 강의가 없다면 '현재 수강중인 강의가 없습니다.' 문장을 노출시키려한다.

<div class="container">
  <h5 class="card-title">수강중인 강의</h5>
  
    <div th:if="${courses_exist.isEmpty()}">
   	 <h4>현재 수강중인 강의가 없습니다.</h4>
    </div>
    
    <div th:unless="${courses_exist.isEmpty()}" id="my-div" style="position:relative; ">
    	<iframe target="parent"th:src="${login_key}" id="my-iframe"> </iframe>
    </div>

</div>

- 강의 정보(courses_exist)는 list형식으로 되어있기때문에 `.isEmpty()` 메소드를 활용하여 조건문을 분기한다.
- th:if : 타임리프틔 조건문
- th:unless: th:if와 쌍을 이루며, if문의 반대상황에서의 실행을 정의한다. 여기서는 강의정보가 있다면, iframe을 통해 외부 페이지를 가져오도록 했다. 

 

결과:

*수강중인 강의가 없을 때 

*수강중인 강의가 있을 때

반응형

Exception processing template "/main": Error resolving template [/main], template might not exist or might not be accessible by any of the configured Template Resolvers

이란 오류가 발생했다. 
분명 로컬에선 잘 돌아갔는데 호스팅했을땐 안돼서 몇시간을 삽질했는데,

다음의 구글링을 통해 그 원인을 알게됐다.
https://myserena.tistory.com/155

 

template might not exist or might not be accessible by any of the configured Template Resolvers

문제발생상황 회원가입 버튼을 누르면 500에러가 발생. 로그를 확인해보니 Error resolving template “/fragments/footer”, template might not exist or might not be accessible by any of the configured Tem..

myserena.tistory.com

에 따르면 view에 대한 path를 다음과 같이 /main으로 했었기 때문에 //main 으로 되어 path해석이 불가능했던것이다.
그러면 왜 내 local, Intellj에선 실행이 됐지?(헷갈리게 말이다..)

When you’re running in your IDE the resource is available straight off the filesystem and the double slash doesn’t cause a problem. When you’re running from a jar file the resource is nested within that jar and the double slash prevents it from being found.

-> //에대한 처리는 IDE에서는 처리를 해 주고, jar 배포시에는 처리를 못한다.

그래서 return "main" 으로 수정해줬더니 해당 path로 잘 return된것을 확인할 수 있었다.

 

 

반응형

OkHttp 라이브러리를 이용해서 유저정보를 호출했다.

OkHttpClient client2 = new OkHttpClient().newBuilder()
                .build();
Request request3 = new Request.Builder()
                .url("https://panasonic1.talentlms.com/api/v1/users/id:"+userBean.getUser_id())
                .method("GET", null)
                .addHeader("Authorization", "Basic RFRDejRxWVI1eE1RemNwQjVVbktQWTFpZHNzR0lwOg==")
                .addHeader("Cookie", "AWSALB=BMrb5JNU1MJMwLUZDnqSqyGhxcUQwfYVos2nthPQ8EU+41COg65UeDedxNZeQsw0gfeqPKKhI2VTDxw2HIiqqPe6T+Oi57IY/EtEOKraj9oPqNn2QFF1f0Dtr9rFhVWKfu1vfkBCTNIVRxXnGKDXBYFWXNtcBP+YYLb5PSTukcAb+6z2cWgqaD4XnwfJhw==; AWSALBCORS=BMrb5JNU1MJMwLUZDnqSqyGhxcUQwfYVos2nthPQ8EU+41COg65UeDedxNZeQsw0gfeqPKKhI2VTDxw2HIiqqPe6T+Oi57IY/EtEOKraj9oPqNn2QFF1f0Dtr9rFhVWKfu1vfkBCTNIVRxXnGKDXBYFWXNtcBP+YYLb5PSTukcAb+6z2cWgqaD4XnwfJhw==; PHPSESSID=elb~qdoi8nqik68t0jrc2hnkkma6om")
                .build();

Response response3 = client.newCall(request3).execute();

response3의 객체정보를 print했더니

System.out.println(response3.getClass().getName());

-> okhttp3.Response 즉 Response 타입인 것을 확인했다.
이 Response형을 String형으로 변환하고 다시 json형으로 변환한다.

//Response형 -> String형
String userString = response3.body().string();

// String형 ->json형
JSONObject userJson = new JSONObject(userString);

 
이렇게 얻은 json형의 유저정보를 출력하면

 System.out.println(userJson);
{"login_key":
"4710239847209318479028314790821347",
"timezone":"(GMT +09:00) Osaka, Sapporo, Tokyo, Japan","bio":"",
"language":"Korean",
"login":"tester",
"deactivation_date":"",
"points":"75",
"custom_field_12":"tester",
"user_type":"Learner-Type",
"custom_field_10":"tester",
"custom_field_11":"tester",
"last_updated_timestamp":"1637067730",
"id":"108",
"first_name":"tester",
"email":"tester@naver.com",
"courses":[{"completion_percentage":"0","role":"learner","expired_on_timestamp":null,"completed_on":"","completed_on_timestamp":null,"enrolled_on_timestamp":"1636445395","last_accessed_unit_url":"https://panasonic1.talentlms.com/course/lastaccessedunit/course_id:131,user_id:108","total_time_seconds":62,"enrolled_on":"09/11/2021, 17:09:55","name":"IPD(화상처리기)","completion_status":"incomplete","id":"131","total_time":"1m 2s","completion_status_formatted":"In progress","expired_on":""},
			{"completion_percentage":"0","role":"learner","expired_on_timestamp":null,"completed_on":"","completed_on_timestamp":null,"enrolled_on_timestamp":"1636600560","last_accessed_unit_url":"https://panasonic1.talentlms.com/course/lastaccessedunit/course_id:130,user_id:108","total_time_seconds":0,"enrolled_on":"11/11/2021, 12:16:00","name":"PLC","completion_status":"not_attempted","id":"130","total_time":null,"completion_status_formatted":"Not started","expired_on":""},
            {"completion_percentage":"0","role":"learner","expired_on_timestamp":null,"completed_on":"","completed_on_timestamp":null,"enrolled_on_timestamp":"1635832492","last_accessed_unit_url":"https://panasonic1.talentlms.com/course/lastaccessedunit/course_id:126,user_id:108","total_time_seconds":0,"enrolled_on":"02/11/2021, 14:54:52","name":"강의_ 대리점용","completion_status":"not_attempted","id":"126","total_time":null,"completion_status_formatted":"Not started","expired_on":""},
            {"completion_percentage":"0","role":"learner","expired_on_timestamp":null,"completed_on":"","completed_on_timestamp":null,"enrolled_on_timestamp":"1635818888","last_accessed_unit_url":"https://panasonic1.talentlms.com/course/lastaccessedunit/course_id:127,user_id:108","total_time_seconds":0,"enrolled_on":"02/11/2021, 11:08:08","name":"강의_본사용","completion_status":"not_attempted","id":"127","total_time":null,"completion_status_formatted":"Not started","expired_on":""}],"last_updated":"16/11/2021, 22:02:10","level":"1","last_name":"han","groups":[{"name":"test_Group","id":"34"}],
 "avatar":"https://d3j0t7vrtr92dk.cloudfront.net/images/default_user.png",
 "custom_field_9":"tester",
 "branches":[],
 "certifications":[],
 "badges":[{"image_url":"https://d3j0t7vrtr92dk.cloudfront.net/images/badges/set1/activity/1.png","criteria":"4 logins","issued_on_timestamp":1635818957,"name":"Activity Newbie","issued_on":"02/11/2021, 11:09:17","type":"activity","badge_set_id":"1"},{"image_url":"https://d3j0t7vrtr92dk.cloudfront.net/images/badges/set1/activity/2.png","criteria":"8 logins","issued_on_timestamp":1635832042,"name":"Activity Grower","issued_on":"02/11/2021, 14:47:22","type":"activity","badge_set_id":"1"}],"created_on":"01/11/2021, 15:11:05","restrict_email":"0","status":"active"
 }

-> 다음과 같은 유저정보가 json 형식으로 나온다.

이제부터 할 것은
1) 이 json데이터에서 특정정보(강의)만을 추출해서 array형태로 변환후
2) 반복문을 돌리며 강의 번호, 강의명, 강의 url를 출력할 것이다.

1) 강의 정보만 추출하기

 //json에서 배열가져오기
 JSONArray courses = userJson.getJSONArray("courses");
 System.out.println(courses);

출력결과

[{"completion_percentage":"0","role":"learner","expired_on_timestamp":null,"completed_on":"","completed_on_timestamp":null,"enrolled_on_timestamp":"1636445395","last_accessed_unit_url":"https://panasonic1.talentlms.com/course/lastaccessedunit/course_id:131,user_id:108","total_time_seconds":62,"enrolled_on":"09/11/2021, 17:09:55","name":"IPD(화상처리기)","completion_status":"incomplete","id":"131","total_time":"1m 2s","completion_status_formatted":"In progress","expired_on":""},
{"completion_percentage":"0","role":"learner","expired_on_timestamp":null,"completed_on":"","completed_on_timestamp":null,"enrolled_on_timestamp":"1636600560","last_accessed_unit_url":"https://panasonic1.talentlms.com/course/lastaccessedunit/course_id:130,user_id:108","total_time_seconds":0,"enrolled_on":"11/11/2021, 12:16:00","name":"PLC","completion_status":"not_attempted","id":"130","total_time":null,"completion_status_formatted":"Not started","expired_on":""},
{"completion_percentage":"0","role":"learner","expired_on_timestamp":null,"completed_on":"","completed_on_timestamp":null,"enrolled_on_timestamp":"1635832492","last_accessed_unit_url":"https://panasonic1.talentlms.com/course/lastaccessedunit/course_id:126,user_id:108","total_time_seconds":0,"enrolled_on":"02/11/2021, 14:54:52","name":"강의_ 대리점용","completion_status":"not_attempted","id":"126","total_time":null,"completion_status_formatted":"Not started","expired_on":""},
{"completion_percentage":"0","role":"learner","expired_on_timestamp":null,"completed_on":"","completed_on_timestamp":null,"enrolled_on_timestamp":"1635818888","last_accessed_unit_url":"https://panasonic1.talentlms.com/course/lastaccessedunit/course_id:127,user_id:108","total_time_seconds":0,"enrolled_on":"02/11/2021, 11:08:08","name":"강의_본사용","completion_status":"not_attempted","id":"127","total_time":null,"completion_status_formatted":"Not started","expired_on":""}]

: 다음과 같이 강의 정보들만 잘 출력됐다.

2) 강의번호, 강의명, 강의 url만 출력하기

  for(int i =0; i <courses.length(); i++){

      JSONObject object  = courses.getJSONObject(i);

      String course_id = object.getString("id");
      String name = object.getString("name");
      String url = object.getString("last_accessed_unit_url");

      System.out.println(course_id);
      System.out.println(name);
      System.out.println(url);

}

출력결과:

130
PLC
https://panasonic1.talentlms.com/course/lastaccessedunit/course_id:130,user_id:108
126
강의_ 대리점용
https://panasonic1.talentlms.com/course/lastaccessedunit/course_id:126,user_id:108
127
강의_본사용
https://panasonic1.talentlms.com/course/lastaccessedunit/course_id:127,user_id:108

 

다음과 같이 강의정보만 잘 출력됐다!

'Study > JAVA' 카테고리의 다른 글

[JAVA] 오버로딩, 오버라이딩  (0) 2022.11.05
[Java] 접근제어자  (0) 2020.06.18
[JAVA] 재귀함수  (0) 2020.06.15
[Java] 조건문 문제풀기-2  (0) 2020.06.15
[JAVA] 조건문 문제풀기  (0) 2020.06.15

+ Recent posts