알고리즘 문제) BOJ 15736. 청기 백기
15736번: 청기 백기
예제 입력 1의 경우 1, 2, 3번 깃발이 존재하고, 3명의 선수가 참가한다. 첫 번째 선수는 1의 배수의 번호를 가진 깃발을 뒤집는다. 초기에 청색이였던 깃발은 첫 번째 선수에 의해 모두 백기로 된
www.acmicpc.net
문제 요약
- 출전할 선수 N명
- N개의 깃발이 청색이 위, 백색이 아래
- 첫 선수 → N개의 깃발 중 1의 배수 뒤집기
- 두 번쨰 선수 → 2의 배수 뒤집기
- i 번째 선수 → i배수 뒤집기
- 마지막 선수가 뒤집으면 끝
- 백색이 위로 놓여있는 수 몇 개?
시간 제한
- 1초
입력
- 학생 수이자 깃발의 수N(20억)
출력
- 백색 수?
접근법
- N=10
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
o | o | o | o | o | o | o | o | o | o |
o | o | o | o | o | |||||
o | o | o | |||||||
o | o | ||||||||
o | o | ||||||||
o | |||||||||
o | |||||||||
o | |||||||||
o | |||||||||
o | |||||||||
W | B | B | W | B | B | B | B | W | B |
⇒ 약수 개수가 홀수 개인 친구 ⇒ 즉, 제곱수 찾기!!
코드
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));
long n = Long.parseLong(br.readLine()) ;
// 제곱수 찾기
long number = 1;
long tmp = number*number;
long cnt = 0;
while(tmp <= n){
cnt++;
tmp = (++number)*(number);
}
System.out.println(cnt);
}
}
SQL ) Lv1. 흉부외과 또는 일반외과 의사 목록 출력하기
문제 요약
- 조건, 정렬, 조회 데이터 형식을 맞춰서 데이터 조회
- 또는 조건
알게 된 점
조건 필터
- AND : 두 가지 조건 모두 만족할 경우
- OR : 둘 중 하나라도 만족할 경우
- BETWEEN A AND B : A, B를 포함한 두 값 사이에 있는 항목 골라 냄
- IN (’A’, ‘B’…) : IN 내부에 포함된 모든 항목을 골라냄
- OR 연산자 보다 실행 속도가 빠르다.
- IN 연산 안에 다른 SELECT 문을 넣을 수도 있음
- LIKE ‘조건’ : 특정 문자가 포함된 데이터 검색 시 사용
- LIKE ‘특정 문자열%’ : 특정 문자로 시작하는 데이터 검색
- LIKE ‘%특정 문자열’ : 특정 문자로 끝나는 데이터 검색
- LIKE ‘%특정 문자열%’ : 특정 문자를 포함하는 데이터 검색
- 만약, 복수개의 특정 문자를 포함하는 데이터를 검색하려면 OR 연산자를 사용해서 연결
- % : 0개 이상의 문자를 대신 표현
- _ : 1개의 문자를 표현
-- 코드를 입력하세요
SELECT DR_NAME, DR_ID, MCDP_CD, DATE_FORMAT(HIRE_YMD, '%Y-%m-%d') FROM DOCTOR
WHERE MCDP_CD in ('CS', 'GS')
ORDER BY HIRE_YMD DESC, DR_NAME ASC;
SQL ) Lv1. 조건에 부합하는 중고거래 댓글 조회하기
문제 요약
- 조인 후 조건에 맞는 데이터 조회
알게 된 점
- 조인 ⇒ 나중에 조인 할 때 정리
- 2022년 10월이라는 조건 필터 할 때 다른 방법
- SUBSTR(B.CREATED_DATE, 1, 7) = ‘2022-10’
- DATE_FORMAT(B.CREATED_DATE, '%Y-%m') = ‘2022-10’
- B.CREATED_DATE LIKE ‘2022-10%’
- B.CREATED_DATE BETWEEN "2022-10-01" AND "2022-10-31”
-- 코드를 입력하세요
SELECT B.TITLE, B.BOARD_ID, R.REPLY_ID, R.WRITER_ID, R.CONTENTS, DATE_FORMAT(R.CREATED_DATE, '%Y-%m-%d') AS DATE_FORMAT
FROM USED_GOODS_BOARD B
JOIN USED_GOODS_REPLY R
ON B.BOARD_ID = R.BOARD_ID
WHERE YEAR(B.CREATED_DATE ) = '2022' AND MONTH(B.CREATED_DATE) = '10'
ORDER BY R.CREATED_DATE ASC, B.TITLE ASC;
SQL ) Lv4. 서울에 위치한 식당 목록 출력하기
문제 요약
- 그룹화해서 조건에 맞는 정보 출력
알게 된 점
- GROUP BY ~ HAVING
- GROUP BY 특정 열이름 : 특정 열 UNIQUE한 값에 따라 데이터를 그룹화(중복된 열은 제거)
- HAVING 조건 : GROUP BY한 결과에 조건을 붙일 때
- REST_ID(식당 ID) 별로 그룹화 하고, 그 중 주소가 서울인 데이터 조회한 코드
-- 코드를 입력하세요
SELECT I.REST_ID, REST_NAME, FOOD_TYPE, FAVORITES, ADDRESS,
ROUND(AVG(REVIEW_SCORE),2) SCORE
FROM REST_INFO I JOIN REST_REVIEW R
ON I.REST_ID = R.REST_ID
GROUP BY REST_ID
HAVING SUBSTR(ADDRESS, 1, 2) = '서울'
ORDER BY SCORE DESC, FAVORITES DESC;
- 그룹별로 하라고 조건이 있지 않았기 때문에 위에 처럼 WHERE절로 먼저 필터링하고 그룹화해도 됨
-- 코드를 입력하세요
SELECT I.REST_ID, REST_NAME, FOOD_TYPE, FAVORITES, ADDRESS,
ROUND(AVG(REVIEW_SCORE),2) SCORE
FROM REST_INFO I JOIN REST_REVIEW R
ON I.REST_ID = R.REST_ID
WHERE SUBSTR(ADDRESS, 1, 2) = '서울'
GROUP BY REST_ID
ORDER BY SCORE DESC, FAVORITES DESC;
'📙 Algorithm Solving > Java' 카테고리의 다른 글
📙[Algo] 24.01.14 알고리즘 (0) | 2024.01.14 |
---|---|
📙[Algo] 24.01.13 알고리즘 (0) | 2024.01.13 |
📙[Algo] 24.01.11 알고리즘 / SQL (0) | 2024.01.11 |
📙[Algo] 24.01.10 정수론 / 알고리즘 (0) | 2024.01.10 |
📙[Algo] 24.01.09 알고리즘 (0) | 2024.01.09 |