[내일배움캠프] 사전캠프 코드카타 15번 문제

2024. 8. 10. 01:04·TIL/코딩테스트 연습문제
TIL 제출하기(매일 23:59 까지)  
❤️‍🔥TIL : Today I Learned

매일 저녁, 공부를 마무리하면서 제출해주세요.  
하루에 1%씩만 나아가도 4개월 동안 쌓이면 꽤 덩치가 커진답니다 :)

\[TIL을 쓰는 이유\]  
1\. 스스로 어제보다 한 발 더 나아갔다는 것을 자각하기  
2\. TIL을 쓰기 위해서라도, 오늘 반드시 단 하나라도 배우기  
3\. 꾸준히 기록을 남기는 습관 가지기

알고리즘 코드카타

문제 설명

자연수 n이 주어졌을 때, n을 어떤 자연수 x로 나누었을 때 나머지가 1이 되는 가장 작은 자연수 x를 구하는 문제입니다. 즉, n % x == 1을 만족하는 가장 작은 x를 찾아야 합니다. 답이 항상 존재함은 증명될 수 있으며, 문제의 제한 조건을 통해 적절한 해를 구할 수 있습니다.


제한 사항

  • 3 ≤ n ≤ 1,000,000

입출력 예

n result
10 3
12 11

입출력 예 설명

입출력 예 #1

  • n = 10일 때, 10을 3으로 나눈 나머지가 1입니다. 3보다 작은 자연수 중에서는 조건을 만족하는 수가 없으므로, x = 3이 답이 됩니다.

입출력 예 #2

  • n = 12일 때, 12를 11로 나눈 나머지가 1입니다. 11보다 작은 자연수 중에서는 조건을 만족하는 수가 없으므로, x = 11이 답이 됩니다.

해결 방법

이 문제는 x를 1부터 n-1까지 차례대로 검사하면서, n % x == 1을 만족하는 가장 작은 x를 찾는 방식으로 해결할 수 있습니다. for 반복문을 사용해 1부터 차례대로 확인하면, 조건을 만족하는 값을 찾는 즉시 반복을 종료하고 그 값을 반환하면 됩니다.


코드

자바로 작성된 코드는 다음과 같습니다:

public class Solution {
    public static int solution(int n) {
        // 1부터 n-1까지 탐색하며 n % x == 1을 만족하는 가장 작은 x를 찾음
        for (int x = 2; x < n; x++) {
            if (n % x == 1) {
                return x;
            }
        }
        return -1; // 문제의 조건 상 이 값은 실행되지 않음
    }

    public static void main(String[] args) {
        // 예시 테스트
        System.out.println(solution(10)); // 3
        System.out.println(solution(12)); // 11
    }
}

풀이 과정

  1. 변수 설정: x를 2부터 n-1까지 차례대로 증가시키면서 확인합니다. x = 1은 나머지가 1이 될 수 없기 때문에 제외합니다.
  2. 반복문: for 문을 이용해 n % x == 1인 값을 찾습니다. 찾으면 바로 그 값을 반환합니다.
  3. 반환: 조건을 만족하는 가장 작은 x를 찾으면 반환하고, 찾지 못할 경우 -1을 반환하지만, 문제에서 항상 해가 존재한다고 했으므로 실제로는 이 경우는 발생하지 않습니다.

동작 설명

  • n = 10일 때:
    • x = 2일 때는 나머지가 0입니다.
    • x = 3일 때는 나머지가 1이므로, 답은 3입니다.
  • n = 12일 때:
    • x = 2부터 x = 10까지는 나머지가 1이 아닙니다.
    • x = 11일 때 나머지가 1이므로, 답은 11입니다.

SQL 코드카타

문제 설명

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물들의 정보를 저장하는 테이블입니다. 이 테이블에서 동물의 종, 이름, 성별 및 중성화 여부 정보를 동물의 아이디 순으로 조회하는 SQL 쿼리를 작성해야 합니다. 또한, 동물의 이름이 없는 경우(NULL), 해당 이름을 "No name"으로 표시해야 합니다.


테이블 구조

  • ANIMAL_ID: 동물의 고유 ID (VARCHAR, NOT NULL)
  • ANIMAL_TYPE: 동물의 생물 종 (VARCHAR, NOT NULL)
  • DATETIME: 보호소에 들어온 날짜 및 시간 (DATETIME, NOT NULL)
  • INTAKE_CONDITION: 동물이 들어왔을 때의 상태 (VARCHAR, NOT NULL)
  • NAME: 동물의 이름 (VARCHAR, NULL 가능)
  • SEX_UPON_INTAKE: 동물의 성별 및 중성화 여부 (VARCHAR, NOT NULL)

문제 요구 사항

  1. 동물의 생물 종, 이름, 성별 및 중성화 여부를 동물의 아이디 순으로 조회합니다.
  2. 이름이 없는 경우(NULL), 이름을 "No name"으로 표시합니다.

예시

ANIMAL_INS 테이블에 다음과 같은 데이터가 있다고 가정합니다:

ANIMAL_ID ANIMAL_TYPE DATETIME INTAKE_CONDITION NAME SEX_UPON_INTAKE
A350276 Cat 2017-08-13 13:50:00 Normal Jewel Spayed Female
A350375 Cat 2017-03-06 15:01:00 Normal Meo Neutered Male
A368930 Dog 2014-06-08 13:20:00 Normal NULL Spayed Female

결과는 다음과 같아야 합니다:

ANIMAL_TYPE NAME SEX_UPON_INTAKE
Cat Jewel Spayed Female
Cat Meo Neutered Male
Dog No name Spayed Female

해결 방법

이 문제를 해결하기 위해 SQL의 IFNULL() 또는 COALESCE() 함수를 사용하여 NULL 값을 "No name"으로 변환할 수 있습니다. 두 함수 모두 NULL 값을 처리할 때 유용합니다. 그 후, ANIMAL_ID 기준으로 정렬하여 원하는 결과를 도출합니다.


SQL 코드

아래는 문제 요구 사항을 만족하는 SQL 쿼리입니다:

SELECT ANIMAL_TYPE, 
       COALESCE(NAME, 'No name') AS NAME, 
       SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

풀이 과정

  1. COALESCE() 함수: NAME 컬럼의 값이 NULL인 경우 "No name"으로 대체합니다. COALESCE() 함수는 첫 번째 인자가 NULL이면 두 번째 인자를 반환합니다.
  2. 컬럼 선택: ANIMAL_TYPE, NAME, SEX_UPON_INTAKE 컬럼을 선택하여 출력합니다.
  3. 정렬: 동물의 ANIMAL_ID를 기준으로 오름차순 정렬합니다.

동작 설명

  • COALESCE(NAME, 'No name'): NAME 컬럼의 값이 NULL이면 "No name"을 반환하고, 그렇지 않으면 기존의 NAME 값을 반환합니다.
  • ORDER BY ANIMAL_ID: 동물의 ANIMAL_ID에 따라 결과를 오름차순으로 정렬하여 출력합니다.

느낀점

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

[내일배움캠프] 사전캠프 코드카타 30번 문제  (0) 2024.09.03
[내일배움캠프] 사전캠프 코드카타 29번 문제  (0) 2024.09.03
[내일배움캠프] 사전캠프 코드카타 14번 문제  (0) 2024.08.10
[내일배움캠프] 사전캠프 코드카타 13번 문제  (0) 2024.08.10
[내일배움캠프] 사전캠프 코드카타 12번 문제  (0) 2024.08.10
'TIL/코딩테스트 연습문제' 카테고리의 다른 글
  • [내일배움캠프] 사전캠프 코드카타 30번 문제
  • [내일배움캠프] 사전캠프 코드카타 29번 문제
  • [내일배움캠프] 사전캠프 코드카타 14번 문제
  • [내일배움캠프] 사전캠프 코드카타 13번 문제
통촏하여주시옵소서
통촏하여주시옵소서
솔방울님의 블로그 입니다.
  • 통촏하여주시옵소서
    솔방울의 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-20 14:35
  • 태그

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

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

티스토리툴바