반응형

1. 문제 번호 5086번


 

 

 

2. 문제 풀이 

 

한줄 평가

 - 그냥 너무 쉽다..

 

 

 

문제를 먼저 정확히 파악

 

  • 약수, 배수는 나머지가 0인것 을 뽑으면 된다.

 

 

 

나의 문제풀이 방식 및 순서

 

 * 나의 다양한 학습이 우선이기 때문에 다양한 방법을 생각 *

 

  1.  

 

 

 

 


3. 소스 인증

 

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        while(true){
            StringTokenizer st = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());

            if (a == 0 && b ==0 ){
                break;
            } else if ( a>b && a%b==0){
                System.out.println("multiple");
            } else if ( a<b && b%a==0){
                System.out.println("factor");
            } else {
                System.out.println("neither");
            }
            
        }
    }
}

 

 

 

 

 

- 실패 소스코드 -

 

 

 

 

 


4. 추가 개념

 

 

 

 

 

 

 

 


5. 참조 블로그


 

불편함을 느끼실 경우 연락 주시면 곧 바로 삭제하도록 하겠습니다.

 


 

 

 

 

 

 

 

 

 

728x90
반응형
반응형

1. 문제 번호 2869번


 

 

 

2. 문제 풀이 

 

한줄 평가

 - 나한테 있어서는 문제를 저렇게 수학적으로 파악하기가 너무 어렵다. (이런 문제의 규칙성 및 푸는 방법에 대해서 공유해주시면 감사하겠습니다ㅜ) 

 

 

 

문제를 먼저 정확히 파악

 

  • 목적지 전날까지 일수 계산하는 방법과 최종 목적지를 기준으로 일수 계산하는 방법이 있다.
    • 목적지 전날까지 기준 (정상에 도달하기 전까지 걸리는 일수 계산을 목표)
      • 예시 length 10 up 5 down 2
        (높이-up) ÷ (up-down)  (10-5) ÷ (5-2) 로 하면 올림하여 2일
    • 최종 목적지를 기준 (정상에 도달한 후에 내려오는 일수를 계산하는데 사용)
      • 예시 length 10 up 5 down 2
        (높이-down) ÷ (up-down) (10-2) ÷ (5-2) 로 하면 올림하여 3일
         

 

 

 

나의 문제풀이 방식 및 순서

 

 * 다양한 학습이 우선이기 때문에 다양한 방법을 생각 *

 

 

  1. 정상에 오르기 전날까지의 날까지 계산을 한다.
    (v-a) : 달팽이가 정상에 도달하기 전까지 남은 높이
    (a-b) : 하루에 올라가는 높이

    잘 생각해보면 (하루에 올라가는 높이) 를 총 길이가 아니라 v-a로 해줘야 전날까지 남은 일수가 나온다.
  2. 아래의 소스코드를 이해하는데 1시간 이상이 소요됐다..어휴
    이유는 예시 5 2 10을 그려보면 이해가 쉽다.
     int days = (10-5) / (5-2)  => 1이 대입이 된다. (기대 값은 2였는데..)
    그래서 days++를 해준다.

  3. 그리고 마지막에 +1을 해서 마지막 정상까지 올라간다!!!
int days = (v-a) / (a-b);
    if((v - a) % (a-b) != 0){
        days++;
    }
System.out.println(days+1);

 

 

실패 

  1. 아래의 방법으로 풀어보려고 시도함
    (총길이 ÷ (Up -Down) ) : 이유는 하루에 올라갈 수 있는 높이이고 총길이 나누면 몫이 Day 겠지!!?  응 아니야..
    1. 예시 2 1 5
      1. up : 2 down : 1 length : 5 이면   5 ÷ (2-1) = 5 (4일이 소요됌)
    2. 예시 5 1 6
      1. up : 5 down : 1 length : 6 이면   6 ÷ (5-1) = 1 (2일이 소요됌)
    3. 예시 100 99 1000000000
      1. 1000000000 ÷ 1 = 999999901    읭???????
    4. 10 8 2  
      1. 10 ÷ ( 8-7 ) = 10 일은 절때 아니잖아.. ?? 이게 뭐지 ?? 

 

 

 

 

 


3. 소스 인증

 

방법 1

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine()," ");
        
        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());
        int v = Integer.parseInt(st.nextToken());

        //(v-a) : 달팽이가 정상에 도달하기 전까지 남은 높이
        //(a-b) : 하루에 올라가는 높이
        
        int days = (v-a) / (a-b); // 달팽이가 정상에 오르기 전날까지의 날
        if((v - a) % (a-b) != 0) // 달팽이가 하루에 오르는 높이보다 정상까지의 높이가 짧을때
            days++;
        System.out.println(days+1); // 마지막날 오른 기록은 계산식에 포함되어있지 않으므로 출력에 1일을 더해준다.
    }
}

 

 

 방법 2

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine()," ");
        long up = Long.parseLong(st.nextToken());
        long down = Long.parseLong(st.nextToken());
        long length = Long.parseLong(st.nextToken());

        long day = up-down;
        long goal = length-down; //최종목적지

        if(goal%day == 0){
            System.out.print( (goal/day) ); //낮에 도착
        } else {
            System.out.print( (goal/day) + 1 ); //하루를 더 가야한다.
        }
    }
}

 

 

- 실패 소스코드 -

 

 

 

 

 


4. 추가 개념

 

 

 

 

 

 

 

 


5. 참조 블로그


 

불편함을 느끼실 경우 연락 주시면 곧 바로 삭제하도록 하겠습니다.

 


 

 

 

 

 

 

 

 

 

728x90
반응형
반응형

 

 

☐ ☑ ☒ ✓ ✔ ✗ ✘

6월목표 7월목표 8월목표
7월 중국어HSK6급 취득 필수 7월21일 HSK6급  
7월 OPIC 필수  7월27일 OPIC 시험  
  영어 자기소개 및 중국어 자기소개   
     

 

8월 1주차 (7/29~8/4) 8월 2주차 (8/5~) 8월 3주차 8월 4주차 8월 5주차
  영어            
  코딩테스트(주4회)            
  기술 면접(1회)            
  중국어            
  NCS            

 

 

9월목표 10월목표 11월목표
           
           
           
           

 

 


참고 블로그

 

 

 

 

 

 

👨🏻‍💻 Tech Interview

최종 수정 : 12/17/2022, 7:23:59 AM

gyoogle.dev

 

728x90
반응형
반응형

 

 

  영어 자기소개서 자격증 공통 전공 자격증
  토익 스피킹 자기소개서 국어 한국사 기사 산업기사
점수 60%~80% 5점 20%~30% 5점 5점 10점 5점

 

 

 

1.  전산 보유 자격증

 



  • 언어
    • 영어 토익 850 ~ (지원조건 : 750 ) (만점기준 850 ~ )

 

  • 공통 
    • 영어(Opic AL - IH - IM3 - IM2 )
    • 한국사(1급)
    • 컴퓨터활용능력1급 (대부분이 IT직군은 가점을 안줌)
    • KBS한국어능력시험 
    • 한국실용글쓰기 준2급~1급
  • 직무
    • 정보처리기사 - 정보처리산업기사
    • 정보통신기사 - 정보통신산업기사
    • 정보보안기사 - 정보보안산업기사
    • 빅데이터분석기사 - 빅데이터분석
    • 데이터분석전문가(ADP) - 데이터분석준전문가(ADsP)
    • 데이터아키텍처전문가(DAP) - 데이터아키텍처준전문가(DAsP)
    • SQLP - SQLD
  • 추가
    • 중국어(6급)
    • 증권투자권유대행인
    • 펀드투자권유대행인
    • 외환전문역1종
    • 재무위험관리사

 

 

 

2.  NCS란

 

NCS (직업기초능력평가+직무수행능력평가)

직업기초능력평가 = 인적성 검사 / / 직무수행능력평가 = 전공시험

 

ICT 시험 과목 : 의사소통능력, 자원관리능력, 문제해결능력, 정보능력, 수리정보

 

예시) 필기시험 구성 : 직업기초능력평가 40문제 + 직무수행능력평가 40문제 일 경우 80분 ~90분 시험

 

일정수준 이상부터는 시간투자대비 실력을 올리기가 매우 어렵다.

그렇기 때문에 실제 필기시험에 응시하여 NCS를 많이 경험하고 내 위치를 파악해야 한다.

어려운 문제면 찍고 넘기고, 2개 중에 고민되어도 빠르게 찍고 넘겨라

 

* 개인적인 의견 *

 - NCS는 어려우면 끝도없다

 - 진짜 못푸는 문제보다 곰곰히 생각하면 다 풀수있다.!!!!!

 - 1분당 1문제를 푸는 속도를 가져야 해서 문제임

 - 전산직의 경우는 적당히 3~5일치 문제풀면 유형이 감이옴(사무직은 NCS경쟁률이 매우높아서 다른 기술직은 그나마 낫다)

 

 

3.  전공 필기(=직무수행능력평가)

 

전공 필기 목차

- 컴퓨터구조

- 운영체제

- 데이터베이스

- 소프트웨어 공학

- 자료구조/알고리즘

- 프로그래밍(C, 파이썬, 자바)

- 네트워크/통신

- 보안/정보보호 등

 

 

  • 정보처리기사 (최신버전)
  • 박미진's 핵심요약zip - 전산직전공(컴퓨터일반, 정보보호론)

 

* 개인적인 의견 *

 - 전공도 어렵기 시작하면 한도 끝도 없다.

 - 전체적으로 얇고 넓게 공부하는게 내 생각에는 효과적

 - 보안기사, 통신기사, 처리기사 수준 + 전자계산기 구조?? 

 - 최근에는 모든 시험이 정보처리기사 2020년 개정본이후로 나옴!!!!!  

 

 

4.  2024년 하반기 공부목표 (NCS + 전공)

 

 

2024년 하반기 공부 목표

 

 - 의사소통 : 매일 지문 3개씩 푸는 비문학 독서

 - 수리능력&자료해석 : 독학으로 끝내는 수리능력,응용수리 500제

 - 문제해결&자원관리능력 : 독학으로 끝내는 PSAT 460제 문제해결+자원관리능력

 

 - 정보보안기사 취득

 

 +++ 추가로 공부 필요할때 

 - 해커스공기업 민간경력자 PSAT 11개년 기출문제집 (언어논리+자료해석+상황판단)

 - 가끔 PSAT(국가직 7급)로 어려운 문제 연습 [의사소통/수리-자료해석/문제해결]

 

 

답을 맞추는 방법 보다 개념 및 깊게 파고가는 듯한 느낌으로 공부할 것

+ 한국은행 논술기출문제 처럼 프린트해서 가지고 있기.

+ NCS홈페이지에 너무 좋은 자료들이 많이 있다.

 

기초 - NCS 국가직무능력표준 문제 유형 파악

중급 - NCS 교재 

고급 - 사이버국가고시센터 ( 다양한 민경채 5/7/9급 자료가 존재)

채용모델 필기문항

 

전형별 평가샘플

 

 

 

5.  면접 전형

 

 면접은 솔직한 답변이 아니라, 면접관을 속이는 과정

 

면접 질문 답변 _ PREP - 결론,이유,사례,결론

경험에 대한 질문 _ STAR - 상황,과제,행동,결과

_ 현재 상황, 원인, 해결책, 기대효과

 

https://m.blog.naver.com/mal-bbal/222909154720

 

면접 유형

  • AI면접
  • 전공면접
  • 상황면접
  • PT면접
  • 토론면접
  • 인성면접
  • 영어면접

 

●  AI 면접 

 

 상황 면접 

설명 : 특정상황이 주어지고 지원자는 그 상황에 대해 본인의 생각을 서술한다.

예시 : 1. 직장 상사가 업무와 관련없는 사적인 일을 지속적으로 본인에게 시킨다. 이 때 지원자는 어떻게 대처할 것인가?

            민원 업무가 많은 경우의 갈등 상황, 업무의 강요, 갈등 상황, 청렴과의 상황, 본인 업무외의 초과

 

핵심 : 정답이 존재 하지 않으며 극단적이지 않게 이성적으로 판단하여 답변하면 된다.

         즉 부당한 업무라고 하는것이 "부당의 정의" 를 충분히 고려하여 판단하여야 한다. 

 

준비 : 마음의 가짐을 가볍게 하고 중립적인 태도를 유지하며 문제의 틈을 찾는것 에만 집중하지 말자.

        결과에 집중이 아니라, 인문적인 관점에서 또는 장기적인 고객의 관점

         (유재석 사례를 머리에 담아둘 것)

 

       Q. 병원 안에 있는 매장을 방문해야 하는데 병원에서 메르스 때문에 통제를 한다면 지원자는 어떻게 들어가겠습니까?

       A. 먼저 전화를 하여 상황을 알리고 안부를 여쭤본다. 무리한 영업보다는 사람의 생명이 가장 중요하다고 생각합니다.

           우리 기업의 이념과 그게 맞지 않나 생각이 들었습니다.

         

       

       

●  PT 면접 

설명 : 자료(신기술)를 전달 받고 회사의 현재 상황을 해결하는 방법에 대해서 발표한다.

          다양한 신기술을 적용해서 해결한 사례들을 보여주고 회사의 문제점을 어떻게 해결할 지, 앞으로 나아가야할 방향에 대해 답변

 

예시 : 1. 4차산업혁명 시대에 따른 우리기업의 발전방향

          2. 비대면 시대의 화상회의시스템 활성화 방안

          3. 기업면접에 AI면접 도입에 따른 장점과 단점

          4. 빅데이터 시대에 데이터 보안관리 방안

          5. 발전소내 디지털트윈기술 적용의 효용성

          6. 신규 출시된 기업 모바일 어플리케이션 활성화 방안

          7. 기업 전반적인 시스템 보안강화 방안

          8. 해당기업에서 수집되는 수많은 데이터 활용방안

          9. 블록체인기술을 이용한 IOT보안강화 방안

 

핵심 : 핵심을 요약하여 발표하는 능력, 본인의 논리, 이미 자료에 있는 그대로 요약할 필요는 없다.

         현재 상황, 원인, 해결책, 기대효과 순서대로 분석하여 설명

 

내용 : 기술에 대해서 명확히 알면 좋겠지만, 어설프거나 잘 모르는 내용을 설명하는 것이 아닌 핵심을 설명하고 시선처리와 자신감을 표현하는 것이 중요하다.

 

 

아래는 예시이며 마인드맵도(마인드노드app) 발표에 매우 활용적이다.

방구석 리뷰룸 - KBS아나운서 김한별님

 

방구석 리뷰룸 - KBS아나운서 김한별님  (마인드노드App)

 

 

 

 

 

●  토론 면접 

설명 : 토론은 찬반으로 각자의 주장을 펼치는 것이다,

          토의는 문제,주제를 선정하여 각자의 의견을 발표내서 최종적인 결과를 도출하는 것

         예를 들어 단체에서 저녁식사 메뉴를 선정하는 과정

 

예시 : 신기술을 활용해서 1. ooo에 대한 해결방안/ ooo에 대한 회사 발전방향 

          현재 추진하고 있는 사업에 대해 문제점을 설명하고 해결방안을 도출하는 과정

 

핵심 : 최종적인 결과를 합심해서 도출하는 것이다.

         "oo역량으로 oo를 시도해보겠다." 같이 적극적인 태도

         타 지원자와의 협업 하는 태도를 취하는 것도 좋고, 업무 중에 회의는 너무 빈번하기 때문에 그 점을 생각

         타 지원자의 이야기 및 핵심내용을 필기하여 작성 !!! 

         "~님의 의견에 대해서 매우 공감합니다."

         "oo방안은 ooo부분에서 효율적이라고 생각하며 추가로 oo방안을 적용시키는것도 좋을것 같습니다."

       

 

준비 : 신기술에 대해서 확실히 이해할 것

          AI, IOT, Cloud, BigData, Mobile, VR, 디지털트윈, 정보보안, 블록체인, 비대면 화상회의

 

 

●  직무 면접 

설명 : 자소서 기반, 기술적인 질문 등을 한다.

예시 : 경험한 프로젝트, 프로그래밍 주 사용언어를 선택한 이유, 개발하면서 발생한 문제

         (선택한언어)가 c언어보다 본인에게 적합하다고 생각하는 이유는? 등등 

 

핵심 : 꾸준히 준비를 해야한다.

 


2024년 하반기 공부 목표

 

  • 상황면접 
    • 즉, 나만의 논리를 가지고 있을 필요가 있다. 그래야 당당한 답변이 가능하다.
    • "유재석 사례", "부당한 업무의 지시" 와 같은 자문자답으로 문서화 하기
  • PT면접
    • 문서를 잘 만들다기 보다는 마인드맵 형식으로라도 발표가 가능하다.
    • 단, 예시에 해당하는 부분을 하나씩 문서화 하기
  • 토론면접
    • 토론은 말 그대로 정답은 없다. 그러니 좋은 의견에 대해서는 치켜세우고 잘 배운다는 표현은 꼭하기
    • 신기술에 대해서 문서화하고 응용 방법도 논리적으로 문서화하기 (보고서 형태)
  • 직무면접
    • 내가 참고하려는 유튜브들 기술 많이 배워서 문서화 하기 ( 보고서 형태 + 다시 공부할 필요없을 정도로 완벽하게 문서화 하기 )

 

    보고서 문서화는 항상 종이를 사용하여 복습하기.

 


5. 참조 블로그


 

불편함을 느끼실 경우 연락 주시면 곧 바로 삭제하도록 하겠습니다.

 


 

 

 

https://blog.naver.com/rleo0618

 

기짱블로그 : 네이버 블로그

슬픈 이직이야기

blog.naver.com

 

 

https://blog.naver.com/nsb0103/222255577057

 

#1

블로그 일기를 한참 멈췄었는데, 그땐 서로이웃공개로 했던 내 일상이 모두 다 담긴 일기였어서... 공개가 ...

blog.naver.com

 

https://get-set-code.tistory.com/23

 

공기업 금융공기업 IT 전산직 취업후기, 가는법, 서류 필기 면접 후기

금융 공기업 IT 관련 정보가 많이 없어서 앞으로 준비하실 분들을 위해 제가 준비했던 방법과 여러 꿀팁을 공유하고자 합니다! 금융 공기업 vs 일반 공기업? 1. 연봉이 높다 2. 비교적 티오가 높다

get-set-code.tistory.com

 

 

https://apply.bok.or.kr/board/recruitLibraryList.do

 

대한민국 최고 경제전문가 집단 :: 한국은행 #1

 

apply.bok.or.kr

 

 

 

 

 

728x90
반응형
반응형

1. 문제 번호 2292번


 

 

 

2. 문제 풀이 

 

한줄 평가

 - 규칙을 찾는것은 너무도 쉬웠지만, 시간초과의 문제가 발생하여 앞으로는 시간복잡도,공간복잡도를 고려를 해야 한다.

 

 

 

문제를 먼저 정확히 파악

 

  • 아래의 표를 보면 뭔가 6의 배수와 연관이 깊다는것을 쉽게 눈치챔
// 반복횟수 | 첫 번째 시작~종료 | 이전시작과의 차이 | 범위안의 개수 
// 0      | 1            | 0            | 0 
// 1      | 2~7          | 1            | 6
// 2      | 8~19         | 6            | 12
// 3      | 20~37        | 12           | 18
// 4      | 38~61        | 18           | 24

 

 

 

나의 문제풀이 방식 및 순서

 

 * 나의 다양한 학습이 우선이기 때문에 다양한 방법을 생각 *

 

  1. Math.pow(6,i) 를 사용하고자 하였다.
    하지만 속도의 이슈가 있었다.
    단순히 사칙연산으로도 풀 수 있는 문제였고, 이전 문제의 수학함수를 사용해서 풀어보고 싶었다.

 

 

 

 


3. 소스 인증

 

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int nRoom = 1;

        if (N == 1){
            System.out.println(nRoom);
            return;
        }
        
        int rangeStart = 2;
        int rangeEnd = 7;

        while(true){
            nRoom++;
            if ( N >= rangeStart && N <= rangeEnd ){
                System.out.println(nRoom);
                break;
            }
            rangeStart = rangeEnd + 1;
            rangeEnd = rangeEnd + (6 * nRoom);
        }
    }
}

 

 

 

 

 

- 실패 소스코드 -

 

더보기
import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int startValue = 1;
        int endValue = 1;
        int nRoom = 1;

        if(N != 1){
            for(int i = 0; ; i++){
                startValue = startValue + (int)Math.pow(6,i);
                endValue = startValue + (int)Math.pow(6,i) - 1;
        
                if ( N >= startValue && N <= endValue ){
                    nRoom++;
                    break;
                };
            }
        }
        System.out.println(nRoom);
        
        // 반복횟수 | 첫 번째 시작~종료 | 이전시작과의 차이 | 범위안의 개수 
        // 0      | 1            | 0            | 0 
        // 1      | 2~7          | 1            | 6
        // 2      | 8~19         | 6            | 12
        // 3      | 20~37        | 12           | 18
        // 4      | 38~61        | 18           | 24
    }
}

 

 

 

 


4. 추가 개념

 

 

 

 

 

 

 

 


5. 참조 블로그


 

불편함을 느끼실 경우 연락 주시면 곧 바로 삭제하도록 하겠습니다.

 


 

 

 

 

 

 

 

 



728x90
반응형
반응형

1. 문제 번호 2903번


 

 

 

2. 문제 풀이 

 

한줄 평가

 - 규칙을 찾는데 조금 오래 걸려서 포기함..

 

 

 

문제를 먼저 정확히 파악

 

  • 총 점 개수의 규칙성을 먼저 파악하거나 or 첫 번째 줄의 규칙성을 파악하면 쉬움!

 

// 반복회수 | 첫번째 라인의 점 | 총 개수
// 0      | 2            |  4
// 1      | 3            |  9
// 2      | 5            |  25
// 3      | 9            |  81
// 4      | 17           |  289
// 5      | 33           |  1089

 

첫 번째 라인의 점은 1, 2, 4, 8, 16 으로 증가

총 개수는 첫 번째 라인의 점의 제곱

 

나의 문제풀이 방식 및 순서

 

 * 나의 다양한 학습이 우선이기 때문에 다양한 방법을 생각 *

 

  1. 초기상태 -> 1번  : 5
  2. 1번 -> 2번         : 5 + 4*2 + 3   = 16
  3. 2번 -> 3번        : 5 + 4*12 + 3  = 56
  4. 3번 -> 4번        : ??? 

즉 생성되는 검은색 점의 규칙성을 찾고자 하였음. (결과는 Fail)

 

 

 

 


3. 소스 인증

 

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int inputCnt = Integer.parseInt(br.readLine());
        StringBuilder st = new StringBuilder();
        int [] intAry = {25,10,5,1};

        while(inputCnt > 0){
            int inputLine = Integer.parseInt(br.readLine());

            for(int i = 0; i < 4; i++){
                int count = inputLine / intAry[i];
                st.append(count);
                st.append(" ");
                inputLine = (inputLine % intAry[i]);
            }
            st.append("\n");
            inputCnt--;
        }
        System.out.println(st);
    }
}

 

 

// Math의 클래스의 pow()메서드를 사용했다.
// Math.pow(거듭제곱할 숫자, 거듭제곱(몇제곱인지);
System.out.println((int)Math.pow(Math.pow(2, n) +1, 2));

 

 

 

- 실패 소스코드 -

 

 

 

 

 

 


4. 추가 개념

 

 

 

 

 

 

 

 


5. 참조 블로그


 

불편함을 느끼실 경우 연락 주시면 곧 바로 삭제하도록 하겠습니다.

 


 

 

 

 

 

 

 

 

 

728x90
반응형
반응형

1. 문제 번호 2720번


 

 

 

2. 문제 풀이 

 

한줄 평가

 - Double, Float, BigDecimal 에 대해서 좀 더 깊게 알게 되었다.

 

 

 

문제를 먼저 정확히 파악

 

  • 몫과 나머지의 계산문제
    1. 예시) 124
      1. 124 ÷ 0.25 는  몫 4 나머지 0.24
      2. 0.24 ÷ 0.1  은  몫 2 나머지 0.04
      3. 0.04 ÷ 0.01 은 몫 4 나머지 0

 

나의 문제풀이 방식 및 순서

 

 * 나의 다양한 학습이 우선이기 때문에 다양한 방법을 생각 *

 

 

 

 

 

 


3. 소스 인증

 

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int inputCnt = Integer.parseInt(br.readLine());
        StringBuilder st = new StringBuilder();
        int [] intAry = {25,10,5,1};

        while(inputCnt > 0){
            int inputLine = Integer.parseInt(br.readLine());

            for(int i = 0; i < 4; i++){
                int count = inputLine / intAry[i];
                st.append(count);
                st.append(" ");
                inputLine = (inputLine % intAry[i]);
            }
            st.append("\n");
            inputCnt--;
        }
        System.out.println(st);
    }
}

 

 

 

 

import java.util.*;
import java.lang.*;
import java.io.*;

// The main method must be in a class named "Main".
class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int inputCnt = Integer.parseInt(br.readLine());
        StringBuilder st = new StringBuilder();
        double [] intAry = {0.25, 0.10, 0.05, 0.01};
        // float [] intAry = {0.25f,0.10f,0.05f,0.01f}; //f 필수!!!

        while(inputCnt > 0){
            /* (int / int는 정수라서 100.0 double 타입의 리터럴로 나눠줘야함 */
            double inputLine = Integer.parseInt(br.readLine()) / 100.0;

            for(int i = 0; i < 4; i++){
                intputLine = roundFunc(inputLine, 3); //소수점 이하 3째자로 반올림
                int count = (int) (inputLine / intAry[i]);
                st.append(count).append(" ");
                inputLine = (inputLine % intAry[i]);
            }
            st.append("\n");
            inputCnt--;
        }
        System.out.println(st);
    }
    private static double roundFunc(double value, int places){
        if(places < 0) throw new IllegalArgumentException();

        BigDecimal bd = BigDecimal.valueOf(value);
        bd = bd.setScale(places, RoundingMode.HALF_UP);
        return bd.doubleValue();
    }
}

 

 

 

 

- 실패 소스코드 -

 

 

 

 

 

 


4. 추가 개념

 

double [] intAry = {0.25, 0.10, 0.05, 0.01};

float [] intAry = {0.25f,0.10f,0.05f,0.01f}; //f 필수!!!

 

  • 변수의 Type이 double이여도 int ÷ int 는 정수로 계산되어진다.
double inputLine = Integer.parseInt(br.readLine()) / 100.0;

 

 

 

float와 double의 문제점

계산을 하는 와중에 다음과 같은 현상을 파악했다.

double a = 10.1;
double b = 10.1;

System.out.print(a+b); //20.2000000003

 

 

내가 원하는 결과값은 20.2인데 반올림 처리해서 사용해야하나?

 

 

1.24를 소수점 2째 자리에서 반올림처리해서 사용하는 경우를 예를 들어보겠다.

double inputLine = 1.24;
double [] intAry = {0.25,0.10,0.05,0.01};

for(int i = 0; i < 4; i++){
    int count = (int) (inputLine / intAry[i]);
    inputLine = (inputLine % intAry[i]);
}

count = 4 
inputLine = 0.24

count = 2
inputLine = 0.03999999999999998

 

이렇게 반복적으로 몫과 나머지를 구해야 할때 원하지 않는 결과 확인했다.

 

그래서 BigDecimal을 알게 되었다.!!!

 

BigDecimal 의 출현

고정소수점과 부동소수점

고정소수점 방식

  • 정수부와 소수부가 자릿수가 제한적이라서 넓은 범위의 실수르 표현하기 어렵다.

예를 들어 7.75 실수를 2진수로 변환하면 111.11이 되는데 이를 각각 지수부(정수부), 소수부로 담아 표현한다.

 

부동소수점 방식

  • 유연한 자릿수를 가지고 있으며, 2진수로 저장되는 특성 때문에 정확한 수를 표현하지 못한다.

예를 들어 7.75 실수를 0.0775 * 10^2로 변경하여 지수부에는 2, 가수부에는 0.0775 를 담는다.

여기서 문제가 발생하는데 마지막 5에서 무한적인 소수점이 생겨난다.

double과 float는 대표적인 부동소수점 방식이다.

 

 

BigDecimal 특징

  • 불변의 특징을 가지고 있어 객체 간의 연산마다 새로운 객체를 생성하여 느리다. 다만 부동소수점의 문제를 보완하기 때문에 필수적이다.
  • 정수형인 unscaled value와 , 소수점 영역인 scale(32bit)
    예를 들어 3.14의 경우 unscaled value는 314, scale은 2
  • BigDecimal에 데이터 저장할때는 반드시 정확한 값을 넣어야 한다.
    예를 들어 new BigDecimal(1.12) 이런건 안되고 new BigDecimal("1.12") 와 같이 넣어줘야 함.

 

기타 관련 메서드들이나 연산들은 아래 참조 블로그를 확인 바랍니다.

 

 


5. 참조 블로그


 

불편함을 느끼실 경우 연락 주시면 곧 바로 삭제하도록 하겠습니다.

 


 

https://dev.gmarket.com/75

 

 

 

 

 



728x90
반응형
반응형

1. 문제 번호 11005번


 

 

 

2. 문제 풀이 

 

한줄 평가

 - 나에게는 역대급 난이도

 

 

 

문제를 먼저 정확히 파악

 

 - 진수라고 하는 것은 한 자리에서 표현할 수 있는 숫자

    즉 2진수는 1자리에서 표현할 수 있는 최대값이 0~1

        8진수는 1자리에서 표현할 수 있는 최대값이 0~7

       10진수는 1자리에서 표현할 수 있는 최대값이 0~9

 

  •    2진수 - > 8진수 변환 방법 
      (작은 것에서 큰 것으로  변환 이라고 이해 하세요. 이것만 이해하면 2진수 -> N진수 모두 가능 )
    1. 배경) 한 자리에 0~1로만 표현 가능한 세상에서 0~7까지 사용하여 표현할 수 있다.
      그렇기 때문에 2진수 3자리를 묶어서 1진수로 표현이 가능해졌다. (8진수 = 2^3)
    2. 예시) 1101111  가 2진수 
      1. 001 101 111  =   1   5   7
  •  8진수 -> 2진수 변환 방법 (큰 것에서 작은 것으로 변환)
    1. 배경) 한 자리에 0~7까지 표현 가능한 세상에서 0~1까지로 밖에 표현할 수 없다.
      그렇기 때문에 8진수 1자리를 묶어서 3자리로 표현해야 한다.
    2. 예시) 157 가 8진수
      1. 1을 표현하려고 3자리로 묶인 001, 5를 표현하려고 3자리로 묶은 101, 7을 표현하려고 3자리로 묶은 111 
  • N진수 -> 10진수 변환 (숫자 체계의 기본 원칙)
    1. 예시) 157가 8진수
      1. (1*8^2) + (5*8^1) + (7*8^0) = 111 (64 + 40 + 7)

 

  • N진수 -> 10진수 변환 방법 (숫자 체계의 기본 원칙)
    1. 예시) ZZZZZ 36진수 (36진수는 한 자리에서 0~35까지 표현 가능)
      1. Z는 35 이다. (A는 10이다.)
      2. ZZ는 (35*36^1)+(35*36^0) 이다. =1295
        1. Z9는 (35*36^1) + (9*36^0) = 1269이다.
      3. Z는 ASCII코드 90이다. 이유는 A (ASCII코드 65) , 26개 (알파벳 총개수) _ A에서 25만큼 떨어져 있다.
      4. Z - x = 35 이다.  x는 55이다.
    2. 즉 문자는 -55를 하면 10진수의 숫자로 표현이 가능하다.
    3. 0번째 자리부터 N번째 자리까지 36의 ^N 을 해줘야 한다.

 

나의 문제풀이 방식 및 순서

 

 * 나의 다양한 학습이 우선이기 때문에 다양한 방법을 생각 *

 

 

A는 ASCII 65, 0 은 ASCII 48 

 

 

 

제일제일 어렵다.. 가장 오래걸리고 진수끼리 변환하는거 나는 너무 어렵다.

계산은 쉽지 근데 내가 막 바꿔가면서 계속 연습해보다보면 뭐가뭐였는지도 모르겠어 🤩 

 


3. 소스 인증

 

import java.util.*;
import java.lang.*;
import java.io.*;

class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        StringBuilder remainder = new StringBuilder();
        
        int N = Integer.parseInt(st.nextToken());
        int B = Integer.parseInt(st.nextToken());
        
        while (N > 0) {
            int temp = N % B;
            if (temp >= 10) {
                char charTemp = (char) (temp + 55);
                remainder.insert(0, charTemp);   
            } else {
                remainder.insert(0, temp); 
            }
            N = N / B;
        }
        
        System.out.println(remainder);
    }
}

 

 

 

 

 

 

 

- 실패 소스코드 -

 

 

 

 

 

 


4. 추가 개념

 

 

 

 

 

 

 

 

 


5. 참조 블로그


 

불편함을 느끼실 경우 연락 주시면 곧 바로 삭제하도록 하겠습니다.

 


 

 

 

 

 

 

 

 

728x90
반응형

+ Recent posts