잡다한 배똥월드

728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? X
본인의 실력으로 풀었는가? O

 

 

코딩테스트 연습 - 조이스틱

조이스틱으로 알파벳 이름을 완성하세요. 맨 처음엔 A로만 이루어져 있습니다. ex) 완성해야 하는 이름이 세 글자면 AAA, 네 글자면 AAAA 조이스틱을 각 방향으로 움직이면 아래와 같습니다. ▲ - 다

programmers.co.kr

 

 

 

 

 

class Solution {
    String word = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //알파벳 위치 찾기 위해서
    int answer = Integer.MAX_VALUE; //가장 큰 값으로 설정
    String[] names; //name 나눌 용도
    boolean[] check; //다녀왔는지 확인 용도
    public int solution(String name) {
        names = name.split("");
        check = new boolean[names.length];
        int all = 0; 
        
        //names 확인하면서 A는 굳이 들를 필요 없으니까 미리 check에 true 표시하고,
        //바꿔야할 알파벳들 개수 구하기
        for (int i = 0; i < names.length; i++) {
            if (names[i].equals("A")) check[i] = true;
            if (!names[i].equals("A")) all++;
        }
        
        //함수 호출
        func(all, 0, 0);
        
        return answer;
    }
    
    public void func(int num, int p, int count) {
        if (num == 0) { //다 바꿨으면 answer 값 바꾸기
            answer = Math.min(count, answer);
            return;
        }
        
        int r = right(p); //오른쪽으로 이동했을 경우 바꿀 위치
        int l = left(p); //왼쪽으로 이동했을 경우 바꿀 위치
        
        //오른쪽으로 이동하는 경우의 함수호출
        check[r] = true;
        int rCount = (p <= r) ? r - p : names.length - p + r; //r의 위치까지 이동 수
        int rIndex = word.indexOf(names[r]); //위로 알파벳을 바꿨을 때
        int anotherR = 26 - rIndex; //아래로 알파벳을 바꿨을 때
        func(num-1, r, count + rCount + Math.min(rIndex, anotherR));
        check[r] = false;
        
        //왼쪽으로 이동하는 경우의 함수호출
        check[l] = true;
        int lCount = (p >= l) ? p - l : p + names.length - l; //l의 위치까지 이동 수
        int lIndex = word.indexOf(names[l]); //위로 알파벳을 바꿨을 때
        int anotherL = 26 - lIndex; //아래로 알파벳을 바꿨을 때
        func(num-1, l, count + lCount + Math.min(lIndex, anotherL));
        check[l] = false;
    }
    
    public int right(int p) {
        for (int i = p; i < names.length; i++) {
            if (check[i]) continue;
            return i;
        }
        
        for (int i = 0; i < p; i++) {
            if (check[i]) continue;
            return i;
        }
        return p;
    }
    
    public int left(int p) {
        for (int i = p; i >= 0; i--) {
            if (check[i]) continue;
            return i;
        }
        
        for (int i = names.length - 1; i >= 0; i--) {
            if (check[i]) continue;
            return i;
        }
        return p;
    }
}

 

테스트 1 통과 (0.15ms, 76.1MB)
테스트 2 통과 (0.34ms, 77.6MB)
테스트 3 통과 (0.15ms, 85MB)
테스트 4 통과 (0.54ms, 71.3MB)
테스트 5 통과 (1.18ms, 79.7MB)
테스트 6 통과 (0.32ms, 73.9MB)
테스트 7 통과 (0.58ms, 74.4MB)
테스트 8 통과 (0.13ms, 76.5MB)
테스트 9 통과 (0.31ms, 73MB)
테스트 10 통과 (0.20ms, 74.8MB)
테스트 11 통과 (0.16ms, 73MB)
테스트 12 통과 (0.13ms, 75.3MB)
테스트 13 통과 (0.28ms, 76.6MB)
테스트 14 통과 (0.24ms, 73.3MB)
테스트 15 통과 (0.16ms, 75.7MB)
테스트 16 통과 (0.16ms, 73MB)
테스트 17 통과 (0.12ms, 77MB)
테스트 18 통과 (0.24ms, 71.7MB)
테스트 19 통과 (0.19ms, 80.8MB)
테스트 20 통과 (0.18ms, 73.4MB)
테스트 21 통과 (0.12ms, 73.3MB)
테스트 22 통과 (0.18ms, 72.7MB)
테스트 23 통과 (0.16ms, 71.9MB)
테스트 24 통과 (0.15ms, 84.8MB)
테스트 25 통과 (0.18ms, 79.2MB)
테스트 26 통과 (0.15ms, 73.7MB)
테스트 27 통과 (0.13ms, 75.4MB)

 

 

 

 

 

 

728x90
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

코딩테스트 연습 - 소수 찾기

한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이

programmers.co.kr

 

 

 

 

 

import java.util.*;
class Solution {
    ArrayList<Integer> nList; //추가한 숫자인지 확인용
    boolean[] check; //다녀간 숫자인지 확인용
    int answer; //리턴값 모을 용도
    public int solution(String numbers) {
        nList = new ArrayList<>();
        answer = 0;
        String[] temp = numbers.split("");
        int[] nums = new int[temp.length];
        check = new boolean[temp.length];
        
        //split으로 나눈 numbers를 int로 변경
        for (int i = 0; i < temp.length; i++) {
            nums[i] = Integer.parseInt(temp[i]);
        }
        
        func(nums, 0);
        
        return answer;
    }
    
    public void func(int[] nums, int num) {
        //무조건 체크하기
        if (checkNum(num)) {
            answer++;
            nList.add(num);
        }
        
       	//숫자 만들기
        for (int i = 0; i < nums.length; i++) {
            if (check[i]) continue;
            
            check[i] = true;
            int temp = num * 10 + nums[i];
            func(nums, temp);
            check[i] = false;
        }
    }
    
    //소수인지 체크하는 함수
    public boolean checkNum(int num) {
        if (num == 0 || num == 1) return false;
        if (nList.indexOf(num) != -1) return false;
        
        for (int i = 2; i <= Math.sqrt(num); i++) {
            if (num % i == 0) return false;
        }
        
        return true;
    }
}

 

테스트 1 통과 (0.22ms, 78.2MB)
테스트 2 통과 (3.36ms, 72.3MB)
테스트 3 통과 (0.13ms, 73.2MB)
테스트 4 통과 (1.18ms, 72.6MB)
테스트 5 통과 (2.58ms, 77.4MB)
테스트 6 통과 (0.16ms, 78.5MB)
테스트 7 통과 (0.34ms, 75.4MB)
테스트 8 통과 (3.42ms, 86MB)
테스트 9 통과 (0.23ms, 78.3MB)
테스트 10 통과 (6.38ms, 74.1MB)
테스트 11 통과 (1.26ms, 72.9MB)
테스트 12 통과 (0.80ms, 69MB)

 

 

 

 

 

 

728x90
728x90

 

 

 

2. 비선형 콘텐츠

  • 컴퓨터 게임이나 컴퓨터 기반 훈련과 같이 사용자와의 상호작용을 통해 진행 상황을 제어하는 멀티미디어의 특징
  • 하이퍼미디어 콘텐츠로도 알려짐

 

 

 

 

 

3. 비밀키 암호화 기법

  • 암호화와 복호화 시 사용하는 키가 동일하므로 대칭키 암호화 기법이라고도 함
  • 안정성은 키의 길이 및 키의 비밀성 유지 여부에 영향을 많이 받음
  • 사용자가 증가할 경우 상대적으로 관리해야 할 키의 수가 많아짐
공개키 암호화 기법 비밀키 암호화 기법
암호키 공개, 복호키 비공개 (비대칭) 암호키와 복호키가 동일 (대칭키/단일키)
암호화, 복호화 속도가 느림 암호화 복호화 속도가 빠름
복잡한 알고리즘 단순 알고리즘
키 분배 용이하고 관리할 키 수가 적음 사용자 증가 시 관리할 키 수가 증가함
대표 방식 : RSA 대표방식 : DES

 

 

 

 

 

13. 레지스터

  • 프로그램 카운터(PC) : 다음 번에 실행할 명령어의 번지를 기억하는 레지스터
  • 명령 레지스터 : 현재 실행 중인 명령을 기억함
  • 부호기 : 해독된 명령에 따라 각 장치로 보낼 제어 신호를 생성함
  • 메모리 주소 레지스터 : 기억장치에 입출력 되는 데이터의 번지를 기억함

 

 

 

 

 

14. 프린트 관련 용어

  • CPS(Character Per Second) : 초당 인쇄되는 문자 수 (인쇄 속도 단위)
  • BPS(Bits Per Second) : 초당 전송되는 비트 (전송 속도 단위)
  • PPM(Paper Per Minute) : 분당 인쇄되는 페이지 수 (인쇄 속도 단위)
  • DPI(Dots Per Inch) : 1인치에 표시할 수 있는 점의 수 (해상도 단위)

 

 

 

 

 

15. BIOS(Basic Input Output System)

  • 컴퓨터의 기본 입출력 장치나 메모리 등 하드웨어 작동에 필요한 명령을 모아놓은 프로그램
  • 전원이 켜지면 POST를 통해 컴퓨터를 점검한 후 사용 가능한 장치들을 초기화하여 윈도우가 시작될 때까지 부팅 과정을 이끔
  • ROM에 저장되어 있어 ROM-BIOS라고도 함
  • 하드웨어와 소프트웨어의 중간 형태인 펌웨어임
  • CMOS에서 설정 가능한 항목 : 시스템의 날짜와 시간, 하드디스크 타입, 부팅 순서, 칩셋, 전원 관리, PnP, 시스템 암호, Anti-virus 등

 

 

 

 

 

17. Windows의 [시스템 구성]

  • Windows가 제대로 시작되지 않는 문제를 식별하도록 도와주는 고급 도구
  • 한 번에 하나씩 공용 서비스 및 시작 프로그램을 끈 상태에서 Windows를 재시작한 후 다시 켤 때 문제가 발생하면 해당 서비스가 문제의 원인임을 알 수 있음
  • 부팅 옵션 중 '안전 부팅'의 '최소 설치'를 선택하면 중요한 시스템 서비스만 실행되는 안전 모드로 Windows를 시작하며, 네트워킹은 사용할 수 없음
  • 정상 모드 : 모든 장치 드라이버 및 서비스 로드
  • 진단 모드 : 기본 장치 및 서비스 로드
  • 선택 모드 : 시스템 서비스 로드, 시작 항목 로드, 원래 부팅 항목 로드를 선택할 수 있음

 

 

 

 

 

18. Windows의 [폴더 옵션] 창

  • 숨김 파일이나 폴더의 표시 여부를 지정할 수 있음
  • 폴더에서 시스템 파일을 검색할 때 색인의 사용 여부를 선택할 수 있음
  • 알려진 파일 형식의 파일 확장명을 숨기도록 설정할 수 있음
  • 폴더 옵션에서는 파일이나 폴더의 보기 형식, 검색 방법 등에 대한 설정을 변경함

 

 

 

 

 

20. Windows 작업 표시줄

  • 작업 표시줄의 위치나 크기를 변경할 수 있으며, 크기는 화면의 1/2까지 늘릴 수 있음
  • 작업 표시줄에 있는 단추를 작은 아이콘으로 표시되도록 설정할 수 있음
  • 작업 표시줄을 자동으로 숨길 것인지의 여부를 선택할 수 있음
  • 작업 보기 단추, 검색 상자는 숨기기 가능하나 시작 단추는 숨길 수 없음

 

 

 

 

 

28. 셀 포인터 이동 작업

  • <Ctrl> + <Page Down> : 다음 시트로 이동
  • <Alt> + <Page Down> : 한 화면 오른쪽으로 이동
  • 이름 상자에 셀 주소 입력 + <Enter> : 해당 셀 위치로 이동
  • <Ctrl> + <Home> : A1 셀로 이동
  • <Home> : 해당 행의 A열로 이동

 

 

 

 

 

30. [개발 도구] - [컨트롤] 그룹

  • 컨트롤 종류 : 텍스트 상자, 목록 상자, 옵션 단추, 명령 단추 등
  • ActiveX 컨트롤은 양식 컨트롤보다 다양한 이벤트에 반응할 수 있지만, 양식 컨트롤보다 호환성은 낮음
  • ActiveX 컨트롤은 [디자인 모드]에서 크기, 이동은 가능하지만 매크로 동작은 실행되지 않음
  • 양식 컨트롤은 [디아진 모드] 상태와 상관없이 매크로 동작 실행 및 크기, 이동 등이 가능
  • 양식 컨트롤의 단추를 클릭하거나 드래그 해서 추가하면 [매크로 지정] 대화상자가 자동으로 표시됨

 

 

 

 

 

34. 배열 수식

조건이 한 개일 때 개수 구하는 방법

  • {=SUM((조건) * 1)}
  • {=SUM(IF(조건, 1))}
  • {=COUNT(IF(조건, 1))}

조건이 여러 개일 때 개수 구하는 방법

  • {=SUM((조건1) * (조건2) * 1)}
  • {=SUM(IF(조건1, IF(조건2, 1)))}
  • {=COUNT(IF(조건1, IF(조건2, 1))}

조건이 한 개일 때 합계 구하는 방법

  • {=SUM((조건) * (합계를 구할 범위))}
  • {=SUM(IF(조건, 합계를 구할 범위))}

조건이 한 개일 때 평균 구하는 방법

  • {=AVERAGE(IF(조건, 평균을 구할 범위))}

 

 

 

 

 

37. 인쇄 기능

  • 기본적으로 워크시트의 눈금선은 인쇄되지 않으나 인쇄 되도록 설정할 수 있음
  • [페이지 설정] 대화상자의 [시트] 탭에서 '간단하게 인쇄'를 선택하면 텍스트만 인쇄됨
  • [인쇄 미리 보기 및 인쇄] 화면을 표기하는 단축키는 <Ctrl> + <F2>
  • [인쇄 미리 보기 및 인쇄]에서 '여백 표시'를 선택한 경우 마우스로 여백을 변경할 수 있음

 

 

 

 

 

41. Access 파일 암호 설정

  • 데이터베이스를 단독 사용 모드(단독으로 열기)로 열어야 파일 암호 설정 가능
  1. 엑세스 프로그램 실행
  2. [파일] - [열기] 클릭, 해당 엑세스 파일 선택 후 [단독으로 열기] 실행
  3. [파일] - [정보] 클릭, [데이터베이스 암호 설정] 클릭하여 암호 설정

 

 

 

 

 

42. 데이터베이스 언어

  • 데이터 제어어(DCL) : 데이터 보안, 데이터의 정확성을 위한 무결성 유지, 시스템 장애에 대비한 데이터 회복, 병행 제어 등을 하기 위한 언어로 주로 데이터베이스 관리자에 의해 사용됨
  • 데이터 정의어(DDL) : 데이터베이스 관리자 또는 응용 프로그래머가 데이터베이스 구조, 데이터 형식, 접근 방식 설정 등 데이터를 생성, 수정
  • 데이터 조작어(DML) : 사용자로 하여금 데이터를 처리할 수 있게 하는 도구, 사용자(응용 프로그램)와 DBMS 간의 인터페이스(의사소통)를 제공

 

 

 

 

 

44. 보고서의 그룹화 및 정렬

  • 그룹은 머리글과 같은 소계 및 요약 정보와 함께 표시되는 레코드의 모음으로 그룹 머리글, 세부 레코드 및 그룹 바닥글로 구성됨
  • 그룹화 할 필드가 날짜 데이터면 전체 값(기본), 일, 주, 월, 분기, 연도 중 선택한 기준으로 그룹화 할 수 있음
  • Sum 함수를 사용하는 계산 컨트롤을 그룹 머리글에 추가하면 현재 그룹에 대한 합계를 표시할 수 있음
  • 필드나 식을 기준으로 최대 10단계까지 그룹화 할 수 있으며, 같은 필드나 식도 계속해서 그룹화 가능함

 

 

 

 

 

46. 보고서의 보기 형태

  • [보고서 보기] : 출력될 보고서를 미리 보는 기능으로 화면 출력용임. [인쇄 미리 보기]와 비슷하지만 페이지 구분 없이 보고서를 모두 표시함
  • [레이아웃 보기] : [보고서 보기]와 [디자인 보기]를 혼합한 형태. 보고서로 출력될 실제 데이터와 보고서 레이아웃을 보여주는 기능으로, 데이터를 보면서 컨트롤의 크기 및 위치, 그룹 수준 및 합계를 변경하거나 추가할 수 있음
  • [디자인 보기] : 컨트롤 도구를 이용해 보고서를 만들거나 수정 가능한 형태로 실제 데이터는 표시되지 않음
  • [인쇄 미리 보기] : 종이에 출력되는 모양 전체를 미리 볼 수 있고, 페이지 구분을 함. 보고서에 표시될 정확한 데이터를 확인하려면 인쇄 미리 보기 기능을 이용해야 함

 

 

 

 

 

49. Like 연산자

  • 대표 문자를 이용해 필드 값이 패턴과 일치하는 레코드만 검색
  • 문법 : WHERE 필드 또는 필드를 나타내는 식 LIKE 문자 패턴
  • Match는 데이터 범위 내에서 원하는 데이터의 열 또는 행의 위치를 찾는 연산자임

 

 

 

 

 

51. 입력 마스크

  • L : 입력 필수. 영문자와 한글만 입력 가능
  • A : 입력 필수. 영문자, 숫자, 한글만 입력 가능
  • 0 : 입력 필수. 0~9까지의 숫자만 입력 가능 (더하기, 빼기 기호 사용 불가)
  • 9 : 입력 선택. 숫자나 공백 입력이 가능하지만, 공백은 저장이 안 됨 (더하기, 빼기 기호 사용 불가)
  • ? : 입력 선택. 영문자와 한글만 입력 가능

 

 

 

 

 

53. 외부 데이터 가져오기

  • 텍스트 파일을 가져와 기존 테이블의 레코드로 추가하려는 경우 기본 키에 해당하는 필드의 값들이 고유한 값이 되도록 데이터를 수정하며 가져올 수 없음
  • Excel 워크시트에서 정의된 이름의 영역을 Access의 새 테이블이나 기존 테이블에 데이터 복사본으로 만들 수 있음
  • Access에서는 한 테이블에 256개 이상의 필드를 지원하지 않으므로 원본 데이터는 열의 개수가 255개를 초과하지 않아야 함
  • Excel 파일을 가져오는 경우 한 번에 하나의 워크시트만 가져올 수 있으므로 여러 워크시트에서 데이터를 가져오려면 각 워크시트에 대해 가져오기 명령을 반복해야 함

 

 

 

 

 

54. 도구

  • 폼 분할 : 하나의 원본 데이터를 이용하여 상단에는 열 형식으로, 하단에는 데이터 시트 형식으로 2개의 폼이 한 화면에 작성됨. 폼을 만들면 기본적으로 레이아웃 보기 형태로 표시되므로 컨트롤의 크기 조정 및 이동, 필드 추가가 가능함
  • 폼 : 열 형식의 폼이 작성되며, 관계가 설정된 테이블이 있을 경우 하단에 데이터 시트 보기 형태로 표시됨
  • 여러 항목 : 테이블 형식의 폼이 작성됨

 

 

 

 

 

 

728x90
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰

programmers.co.kr

 

 

 

 

 

import java.util.*;
class Solution {
    public String solution(int[] numbers) {
        int check = 0;
        
        //문자열로 변경하면서 check에 모든 합 구하기
        String[] nString = new String[numbers.length];
        for (int i = 0; i < numbers.length; i++) {
            nString[i] = Integer.toString(numbers[i]);
            check += numbers[i];
        }
        
        //합이 0이면 그냥 0 바로 리턴
        if (check == 0) return "0";
        
        //정렬
        //예를 들어서 n1 = 1, n2 = 123 일 때 n1+n2인 1123과 n2+n1인 1231을 비교해서
        //큰 숫자로 만들어지는 걸로 내림차순 정렬하기
        Arrays.sort(nString, new Comparator<String>(){
            @Override
            public int compare(String n1, String n2) {
                int s1 = Integer.parseInt(n1 + n2);
                int s2 = Integer.parseInt(n2 + n1);
                
                return s2 - s1;
            }
        });
        
        //구분자 ""로 합쳐서 리턴
        return String.join("", nString);
    }
}

 

테스트 1 통과 (193.35ms, 132MB)
테스트 2 통과 (101.99ms, 124MB)
테스트 3 통과 (256.09ms, 130MB)
테스트 4 통과 (19.94ms, 82.2MB)
테스트 5 통과 (187.00ms, 115MB)
테스트 6 통과 (193.18ms, 122MB)
테스트 7 통과 (2.32ms, 78.2MB)
테스트 8 통과 (1.95ms, 73.2MB)
테스트 9 통과 (1.85ms, 77MB)
테스트 10 통과 (2.35ms, 76.6MB)
테스트 11 통과 (0.03ms, 75.8MB)
테스트 12 통과 (1.62ms, 75.3MB)
테스트 13 통과 (1.81ms, 77.5MB)
테스트 14 통과 (1.80ms, 74.4MB)
테스트 15 통과 (2.24ms, 73.5MB)

 

 

 

 

 

 

728x90
728x90

 

 

 

3. 비밀키/공개키 암호화 기법

비밀키 암호화 기법 (대칭, 단일키)

  • 대표적으로 DES(Data Encryption Standard)가 있음
  • 동일한 키로 데이터를 암호화하고 복호화함
  • 대칭 암호화 기법, 단일키 암호화 기법이라고도 함
  • 암호화/복호화 속도가 빠르며, 알고리즘이 단순하고 파일 크기가 작음
  • 사용자의 증가에 따라 관리해야 할 키의 수가 상대적으로 많아짐

공개치 암호화 기법 (비대칭)

  • 대표적으로 RSA(Rivest Shamir Adleman)가 있음
  • 서로 다른 키로 데이터를 암호화하고 복호화함
  • 데이터를 암호화할 때 사용되는 키(공개키)는 공개하고, 복호화할 때의 키(비밀키)는 비밀로 함
  • 비대칭 암호화 기법이라고도 함
  • 키의 분배가 용이하고, 관리해야할 키의 개수가 적음
  • 암호화/복호화 속도가 느리며, 알고리즘이 복잡하고 파일 크기가 큼

 

 

 

 

10. MPEG

  • MPEG-1 : CD와 같은 고용량 매체에서 동영상을 재생하기 위한 것
  • MPEG-2 : ISO 13818로 구격화된 영상 압축 기술. MPEG-1의 화질 개선을 위한 것
  • MPEG-4 : 통신, PC, 방송 등을 결합하는 양방향 멀티미디어 서비스의 구별을 통해 화상 통신이 가능한 것
  • MPEG-7 : 멀티미디어 정보 검색이 가능한 동영상
  • MPEG-21 : 위의 MPEG 기술들을 통합해 디지털 콘텐츠의 제작, 유통, 보안 등 전 과정을 관리할 수 있는 기술

 

 

 

 

13. 컴퓨터의 제어장치

  • 부호기(Encoder) 레지스터 : 해독된 명령어에 따라 각 장치로 보낼 제어 신호를 생성
  • 프로그램 카운터 (또는 프로그램 계수기) : 다음 순서에 실행할 명령어의 주기억장치 주소를 기억
  • 명령 레지스터 : 현재 실행 중인 명령어를 해독
  • * 연산장치의 보수기(Complementor) : 뺄셈 연산을 위해 음수로 변환

 

 

 

 

15. 컴퓨터 자원의 공유

  • 공유 폴더에 대한 접근 권한은 사용자에 따라 다르게 설정 가능
  • 탐색기의 주소 표시줄에 '\\localhost'를 입력하면 네트워크를 통해 공유한 파일이나 폴더를 확인할 수 있음
  • 탐색기의 공유 기능을 이용하면 파일이나 폴더를 쉽게 다른 사용자와 공유할 수 있음
  • 공유한 파일명 뒤에 '$'를 붙이면 네트워크의 다른 사용자가 공유 여부를 알 수 없게 만듬

 

 

 

 

16. 디스플레이 어댑터와 모니터에 관련된 용어

  • 픽셀(Pixel) : 화면을 이루는 최소 단위로서 같은 크기의 화면에서 픽셀 수가 많을수록 해상도가 높아짐
  • 해상도(Resolution) : 화면을 구성하는 각각의 면이 얼마나 많은 수의 픽셀로 이루어져 있는가를 나타냄. 디지털 장치의 경우 해상도는 1인치 당 존재하는 픽셀 수를 의미
  • 점 간격(Dot Pitch) : 픽셀들 사이의 공간을 나타내는 것으로 간격이 가까울수록 영상은 선명함
  • 재생률(Refresh Rate) : 픽셀들이 밝게 빛나는 것을 유지하기 위한 것으로, 재생률이 높을수록 모니터의 깜빡임이 줄어듬

 

 

 

 

20. 바탕화면의 바로 가기 메뉴

  • 가능한 것 : 새 폴더 만들기, 보기, 정렬 기준, 새로 만들기 등
  • 삭제된 컴퓨터, 휴지통, 네트워크 등은 바탕화면의 바로 가기 메뉴에는 없음

 

 

 

 

21. 피벗 테이블

  • 원본 데이터가 변경되면 자동으로 반영되지 않음
  • [피벗 테이블 도구-[옵션]-[데이터]-[새로고침]을 이용하여 피벗 테이블 데이터도 변경 가능
  • [피벗 테이블 필드 목록]애서 보고서에 추가할 필드 선택 시 데이터 평식이 텍스트이거나 논리값인 필드를 선택하여 '행 레이블' 영역에 추가

 

 

 

 

23. 시나리오 요약 보고서

  • 원본 데이터에서 변경 셀의 값을 수정하더라도 시나리오 요약 보고서에는 자동으로 업데이트 되지 않음
  • 시나리오로 작성한 시나리오 요약 보고서는 새 워크시트에 표시됨

 

 

 

 

29. 차트

  • 계열 겹치기 : 막대 그래프 각각 거리 간격을 의미
  • 간격너비 : 개별적인 막대의 너비를 의미

 

 

 

 

31. 매크로 편집 및 삭제

  • 매크로 편집기 실행 : Alt + F8
  • Visual Basic 편집기 실행 : Alt + F11
  • 일반적인 코드 실행 : F5
  • 한 단계씩 코드 실행 : F8
  • PERSONAL.XLSB 파일을 삭제하면 통합 문서에 있는 모든 매크로 삭제 가능

 

 

 

 

34. 통합 문서

  • 시트 보호 : 특정 시트만 보호
  • 공유된 통합 문서는 여러 사용자가 동시에 면경 및 병합 가능
  • 통합 문서 보호 설정 시 암호를 지정해도 워크시트 내용 수정 가능 => 시트 보호 기능을 사용하면 내용 수정 불가능

 

 

 

 

36. 셀에 수식 입력 방법

  • 통합 문서의 여러 워크시트에 있는 동일한 셀 범위 데이터를 이용하려면 수식에서 3차원 참조를 사용
  • 계산할 셀 범위를 선택하여 수식을 입력한 후 Ctrl + Enter 키를 누르면 한 번에 채울 수 있음
  • 수식을 입력한 후 결과 값이 상수로 입력되게 하려면 수식을 입력한 후 바로 F9 키를 누르면 됨
  • 배열 상수는 숫자나 텍스트 외에 TRUE, FALSE 등의 논리값 또는 #N/A와 같은 오류 값도 포함될 수 있음

 

 

 

 

37. [보기]-[창]

  • [새 창] : 현재 작업중인 통합 문서를 새 창에 표시
  • [모두 정렬] : 현재 열려 있는 통합 문서를 바둑판식, 계단식, 가로, 세로 등 4가지 형태로 배열
  • [숨기기] : 현재 활성화된 통합 문서 창을 보이지 않도록 숨김
  • [나누기] : 워크시트를 최대 4개의 창으로 분할하여 멀리 떨어져 있는 여러 부분을 한 번에 볼 수 있음

 

 

 

 

42. 사용자 정의 입력 마스크

  필수 선택
숫자(기호안됨) 0 9
영문자, 한글 L ?
영어, 한글, 숫자 A a
모든 문자, 공백 & c
모두 대문자로 >
모두 소문자로 <
숫자/공백 가능, 덧셈/뺄셈 기호 가능 #

 

 

 

 

44. [관계 편집] 대화 상자

  • 관계의 종류는 나오지만 종류를 선택할 수 없음
  • 관계를 구성하는 어느 한 쪽의 테이블 또는 필드 및 쿼리를 변경할 수 있음
  • 조인 유형을 내무 조인, 왼쪽 우선 외부 조인, 오른쪽 우선 외부 조인 중에서 선택할 수 있음
  • '항상 참조 무결성 유지'를 선택한 경우 '관련 필드 모두 업데이트'와 '관련 레코드 모두 삭제' 옵션을 선택할 수 있음

 

 

 

 

46. [디자인 보기]에서 설정 가능한 작업

  • 필드의 '설명'에 입력한 내용은 테이블 구조에 영향을 미치지 않고 상태 표시줄에 표시됨
  • 컨트롤 표시 속성은 텍스트 상자, 목록 상자, 콤보 상자 중 선택할 수 있음
  • 한 개 이상의 필드를 선택하여 기본 키로 설정할 수 있음
  • 폼 필터를 적용하여 조건에 맞는 레코드만 표시하는 것은 [폼 보기]에서 할 수 있는 작업임

 

 

 

 

49. 필드 조건식

  • 무조건 [] (대괄호)로 작성해야 함
  • ex) >= [조회할 최소 나이 입력]

 

 

 

 

52. '텍스트 상자' 컨트롤의 속성 설정

  • '상태 표시줄 텍스트' 속성 : 컨트롤을 선택했을 때 상태 표시줄에 표시할 메세지를 설정
  • '컨트롤 원본' 속성 : 함수나 수식 사용 시 문자는 큰 따옴표("), 필드명은 대괄호([])로 묶어줌
  • '사용 가능' 속성 : 컨트롤에 포커스를 이동시킬 수 있는지의 여부를 설정
  • '중복 내용 숨기기' 속성 : 데이터가 이전 레코드와 같을 때 컨트롤의 숨김 여부를 설정

 

 

 

 

54. 보고서

  • 업무 문서 작성 보고서 : 기업에서 작성하는 세금 계산서, 거래 명세서 등 업무 양식용 보고서
  • 우편 엽서 보고서 : 우편 엽서용
  • 레이블 보고서 : 편지 봉투에 붙이는 주소 레이블을 인쇄용 보고서로 바꾸는 용도
  • 크로스탭 보고서 : 보고서를 가로 세로로 그룹화하고 그 그룹화한 데이터에 대해 계산을 수행하는 용도

 

 

 

 

56. 폼의 모달 속성

  • 폼을 모달 폼으로 열 것인지의 여부를 지정
  • '예'를 선택하면 해당 폼이 열려 있는 경우 다른 화면을 선택할 수 없음
  • VBA 코드를 이용하여 대화 상자의 모달 속성을 지정할 수 있음
  • 폼이 모달 대화 상자이면 디자인 보기로 전환 후 데이터 시트 보기로 전환이 가능
  • 사용자 지정 대화 상자의 작성이 가능

 

 

 

 

57. 보고서

  • 보거서에 포함할 필드가 모두 한 테이블에 있는 경우 해당 테이블을 레코드 원본으로 사용함
  • 둘 이상의 테이블을 이용하여 보고서를 작성하는 경우 쿼리를 만들어 레코드 원본으로 사용
  • 보고서 도구를 사용하면 정보를 입력하지 않아도 바로 보고서가 생성되므로 매우 쉽고 빠르게 보고서를 만들 수 있음
  • 보고서 마법사를 이용하는 경우 필드 선택은 여러 개의 테이블 또는 여러 개의 쿼리로 가능하며, 데이터 그룹화 및 정렬 방법을 지정할 수도 있음

 

 

 

 

 

728x90
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? X
본인의 실력으로 풀었는가?

 

 

코딩테스트 연습 - 디스크 컨트롤러

하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를

programmers.co.kr

 

 

 

 

 

import java.util.*;

class Solution {
    public int solution(int[][] jobs) {
        int answer = 0;
        
        //요청시간 순으로 정렬해놓은 큐
        PriorityQueue<Job> waiting = new PriorityQueue<>(new Comparator<Job>(){
            @Override
            public int compare(Job j1, Job j2) {
                return j1.start - j2.start;
            }
        });
        
        //작업시간 순으로 정렬할 큐
        PriorityQueue<Job> working = new PriorityQueue<>(new Comparator<Job>(){
            @Override
            public int compare(Job j1, Job j2) {
                return j1.work - j2.work;
            }
        });
        
        //waiting에 넣기
        for (int i = 0; i < jobs.length; i++) {
            waiting.offer(new Job(jobs[i][0], jobs[i][1]));
        }
        
        int count = 0; //몇 개 처리됬는지 파악할 변수
        int time = 0; //작업이 끝나는 시간을 담을 변수
        
        while (count < jobs.length) {
        	//waiting이 비어있지 않고, 작업이 끝나는 시간 이전에 요청이 들어온 것이 있다면
            //꺼내서 working에 넣기
        	while (!waiting.isEmpty() && time >= waiting.peek().start) {
                working.offer(waiting.poll());
            }
            
            //만약에 working이 비어있지 않으면
            if (!working.isEmpty()) {
            	//작업시간이 가장 짧은 즉, working 가장 처음에 있는 것을 꺼내서 계산하기
                //time은 작업이 끝나자마자 새로운 작업이 시작되기 때문에 해당 새로운 작업의 작업 시간 추가
                //answer은 총 시간이기 때문에 작업이 완전히 끝나는 시간부터 요청이 들어온 시간을 뺀 값을 추가하기
                //count는 작업 하나가 끝났기 때문에 1 더하기
                Job job = working.poll();
                time += job.work;
                answer += (time - job.start);
                count++;
            } else {
            //working이 비어있으면 time + 1
                time++;
            }
        }
        
        //총 시간에서 jobs의 갯수로 나눠서 리턴
        return answer / jobs.length;
    }
}

class Job {
    int start, work;
    public Job(int start, int work) {
        this.start = start;
        this.work = work;
    }
}

 

테스트 1 통과 (2.76ms, 73.2MB)
테스트 2 통과 (2.25ms, 75.8MB)
테스트 3 통과 (2.76ms, 70.8MB)
테스트 4 통과 (3.04ms, 76.6MB)
테스트 5 통과 (2.41ms, 74.2MB)
테스트 6 통과 (0.85ms, 65.4MB)
테스트 7 통과 (2.74ms, 73.5MB)
테스트 8 통과 (2.23ms, 73.9MB)
테스트 9 통과 (1.45ms, 73.8MB)
테스트 10 통과 (2.57ms, 77MB)
테스트 11 통과 (0.85ms, 78.7MB)
테스트 12 통과 (1.25ms, 77.6MB)
테스트 13 통과 (1.20ms, 74MB)
테스트 14 통과 (1.23ms, 75.6MB)
테스트 15 통과 (1.19ms, 75.7MB)
테스트 16 통과 (0.96ms, 76.5MB)
테스트 17 통과 (1.11ms, 77.6MB)
테스트 18 통과 (1.18ms, 76.1MB)
테스트 19 통과 (0.79ms, 75.1MB)
테스트 20 통과 (1.13ms, 80.7MB)

 

 

 

 

 

 

728x90
728x90
코딩 테스트 풀이 체크리스트
2시간 내에 풀었는가? O
본인의 실력으로 풀었는가? O

 

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린

programmers.co.kr

 

 

 

 

 

import java.util.*;
class Solution {
    public int solution(int[] priorities, int location) {
        int answer = 0;
        
        //프린트 대기열을 표현하기 위해 큐 선언
        Queue<Integer> list = new LinkedList<>();
        
        //큐에 0부터 priorities 길이 - 1만큼 숫자를 넣음
        for (int i = 0; i < priorities.length; i++) {
            list.add(i);
        }
        
        //큐가 비워질 때까지 반복
        while (!list.isEmpty()) {
        
        	//제일 먼저 들어온 숫자 꺼내기
            int p = list.poll();
            
            //꺼낸 숫자의 우선순위 선언
            int num = priorities[p];
            
            //우선순위가 높은게 있는지 없는지 체크할 용도
            boolean value = false;
            
            //priorities를 하나씩 보면서 우선순위가 더 큰게 있는지 확인하기
            for (int i = 0; i < priorities.length; i++) {
                if (i == p) continue;
                if (priorities[i] > num) {
                    value = true;
                    break;
                }
            }
            
            //만약 우선순위가 높은게 없다면
            if (!value) {
                answer++; //answer은 몇 번째 순서로 꺼내진건지를 파악하는 것 그래서 1 추가
                priorities[p] = 0; //우선순위를 끝냈으니까 0으로 리셋
                if (location == p) break; //만약 location과 숫자가 동일하다면 while 종료
            } else {
                list.add(p); //우선순위가 높은게 있다면 그냥 다시 맨 뒤로 넣기
            }
        }
        
        return answer;
    }
}

 

테스트 1 통과 (0.26ms, 74.5MB)
테스트 2 통과 (0.89ms, 81.1MB)
테스트 3 통과 (0.16ms, 73.3MB)
테스트 4 통과 (0.16ms, 89MB)
테스트 5 통과 (0.22ms, 75.8MB)
테스트 6 통과 (0.28ms, 72.2MB)
테스트 7 통과 (0.20ms, 71.8MB)
테스트 8 통과 (0.69ms, 67.4MB)
테스트 9 통과 (0.15ms, 85.4MB)
테스트 10 통과 (0.24ms, 73.7MB)
테스트 11 통과 (0.65ms, 74.4MB)
테스트 12 통과 (0.19ms, 74.7MB)
테스트 13 통과 (0.71ms, 75.7MB)
테스트 14 통과 (0.17ms, 74.6MB)
테스트 15 통과 (0.19ms, 77MB)
테스트 16 통과 (0.23ms, 77.3MB)
테스트 17 통과 (0.65ms, 78.3MB)
테스트 18 통과 (0.17ms, 80.3MB)
테스트 19 통과 (0.42ms, 78MB)
테스트 20 통과 (0.19ms, 80.3MB)

 

 

 

 

 

 

728x90
728x90

 

 

 

 

 

 

 

 

 

 

일요일에 풀었는데 문제는 전혀 기억나지 않음... 미리미리 적어놓을껄...

1번부터 3번까지는 확실하게 제출했는데, 4번 문제는 테스트케이스도 몇 개 실패했다고 떴었음

진짜 한 10분만 더 있었어도 풀 수 있었을 것 같은데 아쉬움만 가득해서

아 분명 떨어졌다.. 라고 생각하고 있었는데 다행히 합격!

이제 15일에 2차 준비하러 프로그래머스 과제관 뿌시러 갑니다...

 

 

 

 

 

728x90

+ Recent posts