[내일배움캠프] 본캠프 코드카타 19번 문제

2024. 10. 28. 11:47·TIL/코딩테스트 연습문제

알고리즘 문제: 어떤 양의 정수가 제곱수인지 확인하기

이번 문제는 임의의 양의 정수 n이 양의 정수 x의 제곱인지 확인하는 것입니다. n이 양의 정수 x의 제곱이라면 (x + 1)^2을 반환하고, 그렇지 않다면 -1을 반환해야 합니다.

문제 분석

  1. n이 어떤 양의 정수 x의 제곱이라면, n은 x * x 형태로 표현됩니다. 예를 들어, n = 121이라면, 이는 11 * 11 형태이므로 x = 11입니다.
  2. n이 x * x 형태가 아니면 -1을 반환합니다.

접근 방법

  1. 주어진 수 n에 대해 Math.sqrt(n)을 사용하여 n의 제곱근을 구합니다.
  2. 제곱근이 정수라면, (제곱근 + 1)의 제곱을 반환하고, 정수가 아니라면 -1을 반환합니다.

제약 사항

  • n은 1 이상, 50조 이하의 양의 정수입니다. 따라서 이 범위에서 효율적으로 동작할 수 있도록 해야 합니다.

코드 구현 (Java)

public class SquareCheck {
    public long solution(long n) {
        long sqrt = (long) Math.sqrt(n);

        // sqrt * sqrt가 n과 같다면 제곱수로 판단
        if (sqrt * sqrt == n) {
            return (sqrt + 1) * (sqrt + 1);
        } else {
            return -1;
        }
    }

    public static void main(String[] args) {
        SquareCheck checker = new SquareCheck();
        System.out.println(checker.solution(121)); // 144 출력
        System.out.println(checker.solution(3)); // -1 출력
    }
}

코드 설명

  1. Math.sqrt(n)를 이용해 n의 제곱근을 구합니다.
  2. sqrt * sqrt이 n과 같은지 확인합니다.
  3. 조건이 참이면 (sqrt + 1) * (sqrt + 1)을 반환하여 다음 제곱수를 계산합니다. 그렇지 않으면 -1을 반환합니다.

SQL 문제: 흉부외과와 일반외과 의사 정보 조회하기

이번 SQL 문제는 병원의 DOCTOR 테이블에서 흉부외과(CS)와 일반외과(GS)에 속한 의사들의 정보를 조회하는 것입니다. 각 의사의 이름, ID, 진료과, 고용일자를 조건에 맞게 정렬하여 출력해야 합니다.

문제 분석

  1. DOCTOR 테이블에서 필요한 데이터는 DR_NAME, DR_ID, MCDP_CD, HIRE_YMD입니다.
  2. 조건에 맞는 진료과 코드(MCDP_CD)는 흉부외과(CS)와 일반외과(GS)입니다.
  3. 결과는 HIRE_YMD를 기준으로 내림차순으로 정렬하되, 고용일자가 같을 경우 DR_NAME을 기준으로 오름차순 정렬해야 합니다.

SQL 쿼리

문제에서는 DOCTOR 테이블에서 진료과가 흉부외과(CS) 또는 일반외과(GS) 인 의사의 정보를 조회하고, 고용일자 기준으로 내림차순으로, 고용일자가 같다면 이름을 기준으로 오름차순으로 정렬해야 합니다.

테이블 구조

Column Name Type Nullable
DR_NAME VARCHAR(20) FALSE
DR_ID VARCHAR(10) FALSE
LCNS_NO VARCHAR(30) FALSE
HIRE_YMD DATE FALSE
MCDP_CD VARCHAR(6) TRUE
TLNO VARCHAR(50) TRUE
  • DR_NAME: 의사 이름
  • DR_ID: 의사 ID
  • LCNS_NO: 면허 번호
  • HIRE_YMD: 고용 일자
  • MCDP_CD: 진료과 코드
  • TLNO: 전화 번호

예시 데이터

DR_NAME DR_ID LCNS_NO HIRE_YMD MCDP_CD TLNO
루피 DR20090029 LC00010001 2009-03-01 CS 01085482011
패티 DR20090001 LC00010901 2009-07-01 CS 01085220122
뽀로로 DR20170123 LC00091201 2017-03-01 GS 01034969210
티거 DR20100011 LC00011201 2010-03-01 NP 01034229818
품바 DR20090231 LC00011302 2015-11-01 OS 01049840278
티몬 DR20090112 LC00011162 2010-03-01 FM 01094622190
니모 DR20200012 LC00911162 2020-03-01 CS 01089483921
오로라 DR20100031 LC00010327 2010-11-01 OS 01098428957
자스민 DR20100032 LC00010192 2010-03-01 GS 01023981922
벨 DR20100039 LC00010562 2010-07-01 GS 01058390758

SQL 쿼리 예시

다음 SQL 쿼리는 조건에 맞는 데이터를 조회하는 방식입니다:

SELECT DR_NAME, DR_ID, MCDP_CD, HIRE_YMD
FROM DOCTOR
WHERE MCDP_CD IN ('CS', 'GS')
ORDER BY HIRE_YMD DESC, DR_NAME ASC;

예상 결과

DR_NAME DR_ID MCDP_CD HIRE_YMD
니모 DR20200012 CS 2020-03-01
뽀로로 DR20170123 GS 2017-03-01
벨 DR20100039 GS 2010-07-01
자스민 DR20100032 GS 2010-03-01
패티 DR20090001 CS 2009-07-01
루피 DR20090029 CS 2009-03-01

위와 같은 출력이 되며, 진료과가 CS와 GS인 의사들이 고용일자 내림차순으로 정렬된 결과를 확인할 수 있습니다.

'TIL > 코딩테스트 연습문제' 카테고리의 다른 글

[내일배움캠프] 본캠프 코드카타 20번 문제  (0) 2024.10.29
[내일배움캠프] 본캠프 코드카타 18번 문제  (0) 2024.09.26
[내일배움캠프] 본캠프 코드카타 17번 문제  (0) 2024.09.12
[내일배움캠프] 본캠프 코드카타 16번 문제  (0) 2024.09.11
[내일배움캠프] 사전캠프 코드카타 36번 문제  (0) 2024.09.03
'TIL/코딩테스트 연습문제' 카테고리의 다른 글
  • [내일배움캠프] 본캠프 코드카타 20번 문제
  • [내일배움캠프] 본캠프 코드카타 18번 문제
  • [내일배움캠프] 본캠프 코드카타 17번 문제
  • [내일배움캠프] 본캠프 코드카타 16번 문제
통촏하여주시옵소서
통촏하여주시옵소서
솔방울님의 블로그 입니다.
  • 통촏하여주시옵소서
    솔방울의 IT
    GuestBook Guest
    GitHub GitHub
    Notion Notion
    글쓰기 관리
    • 분류 전체보기 (120)
      • Java (16)
      • Spring (13)
      • 자료구조 (3)
      • 보안 (6)
        • 네트워크보안 (2)
        • 백신 프로그램 (4)
      • 네트워크 (10)
        • 네트워크 관련지식 (7)
        • TCP IP (3)
      • Windows (9)
      • TIL (54)
        • TIL(Today I Learned) (19)
        • 코딩테스트 연습문제 (29)
        • 내일배움캠프 숙제 (6)
      • 프로젝트 (4)
        • 백신데스크톱 (1)
        • 스파르타코딩 (3)
      • 자격증 (5)
        • 사무자동화산업기사 (0)
        • 정보처리산업기사 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 공지사항

    • 방명록을 적어주시면
  • 전체
    오늘
    어제
  • 06-19 03:03
  • 태그

    IT
    비밀집단
    정보보안
    스파르타코딩
    백신프로그램
    검은조직
    epp
  • 인기 글

  • whlsls3377.dev@gmail.com
통촏하여주시옵소서
[내일배움캠프] 본캠프 코드카타 19번 문제
상단으로

티스토리툴바