[정보처리기사 실기 최신문제집] 기출문제 2023년 02회

이기적 영진닷컴
21 팔로워
2024. 10. 21.
이 동영상은 [이기적 정보처리기사 실기 최신문제집] 도서의 내용을 바탕으로 제작되었습니다.
🔹 도서 자세히 보기 : https://www.yes24.com/Product/Goods/133821787
🔹 모르는 문제? [이기적 스터디 카페] 질문하기 : https://cafe.naver.com/yjbooks
🔹 이기적 홈페이지 : https://license.youngjin.com/
🔹 인스타그램 : https://www.instagram.com/license.youngjin_official/
첫번째 문제부터 같이 보도록 하죠.
아래 설명에 해당하는 용어를 쓰세요 라고 되어 있습니다.
이거는 처음 보시는 분들이 계실텐데
데이터나 시스템의 무단 변경을 막아서 정보의 신뢰성을 보장하는 보안기술로
무단 변경을 막는다는게 포인트구요.
데이터 미변조를 방지해서 해킹이나 사이버 공격으로부터 시스템을 안전하게 보호한다.
디지털 서명, 해시 함수, 타임 스탬프 등을 통해서 변환을 할 수 있고
데이터의 무결성, 보장, 시스템 보안, 강화 이런 것들이 가능하다.
이런 것들을 하기 위해서 무단 변경을 막는다는게 포인트구요.
이게 답이 템퍼 프루핑입니다.
이렇게 신기술이라던지 여러가지 보안기술들이
책에 안나와있는게 가끔가다 한두개씩 나옵니다.
이런것들은 기출문제를 통해서 이런것들이 있었구나 하면서 하나 둘씩 외우시면 되요.
너무 크게 부담을 가지실 필요는 없습니다.
이런 나올 수 있는 여러가지 요소들을 다 외워야겠다고 하면 너무 양이 많아져요.
이게 템퍼 프루핑이 아마 2021년도 ICT 시사상식사전이라고
매년 나오는게 있거든요. 수백개씩 나오는게 있어요. 수십개씩 나오는 용어들이 있는데
그 용어에서 나온거에요.
그러니까 매년 수십개씩 나오는 용어를 다 외운다고 하면
물론 문제에 맞출 수 있겠지만 너무 양이 많잖아요.
그럴바에는 차라리 코드공부라던지 그런것 쪽에 치중을 하시는게 좋기 때문에
이런것들은 그냥 기출문제 보고 이런게 있었구나 하고
간단하게 암기하고 넘어가시면 되겠습니다.
두번째입니다. 디자인 패턴 자주 나오는거죠.
일단 기억. 객체 생성에 많은 인수가 필요한 복잡한 객체를 단계적으로 생성해 나가는
계단처럼 단계적으로 쌓아가는 이런 패턴이 빌더입니다.
그리고 오직 하나의 인스턴스만을 가진다.
하나. 싱글이란 뜻이죠. 싱글톤이에요. 싱글톤 어디있죠?
여기있네요. 이 두가지가 정답이 되겠습니다.
세번째. 아래 자바코드는 오류가 발생을 해요.
오류가 발생하는 행번호를 쓰라고 되어있습니다.
일단은 접근을 해봐야겠죠?
new b. 새로운 객체 만들고요. 같은 타입으로 할당합니다.
b를 만들때 생성자 따로 없으니까 여기서는 크게 문제가 안됩니다.
호출을 해서 출력을 하고 있죠.
t.x를 출력할거에요.
t라는것은 이제 이 객체를 얘기하는거니까
그 안에 가서 x를 호출하려고 보니까
x는 클래스 변수입니다.
클래스 변수인데 이게 어떻게 할당이 되고 있냐면
a.c. 요놈의 있는 c에다가 10을 더해서 출력을 하고 있어요.
그런데 여기에 접근을 할 수가 없습니다.
이 클래스로 생성이 되지 않았고요.
일단 객체 생성이 되지 않았고
클래스 명으로 접근하려면 여기에 스태틱이 붙어야 돼요.
근데 스태틱이 없죠? 그러니까 이 단계에서 오류가 납니다.
그래서 5번 행이 문제가 생긴다.
혹시 이유를 적으라고 하면 스태틱이 없기 때문에 접근을 할 수가 없다.
이렇게 생각을 적어주시면 되겠죠.
넘어갈게요.
네번째, 이렇게 선으로 있는 것들이 종종 나오죠.
테스트 모듈과 그 설명을 올바르게 연결시키시오.
의미를 찾고 용어를 연결시켜 볼게요.
일단 테스트 대상 어쩌고저쩌고들의 집합이라고 되어 있습니다.
요게 테스트 스위트입니다.
그리고 존재하지 않는 상위 모듈의 더미 역할을 한다 라고 되어 있어요.
상위 모듈, 이 위쪽에 존재하지 않는 애들에 대한 부분을 이야기를 하고 있는 거죠.
요거는 테스트 드라이버입니다.
그리고 상위 모듈의 테스트를 위해서
최소한의 기능만을 가지는 더미 모듈
이거는 이제 하위를 얘기하는 거겠죠.
상위 모듈의 테스트를 한다고 했으니까
상위 아니면 하위 잖아요.
하위 더미 모듈을 이야기하는 건데
요거는 스톱입니다.
나머지는 이거죠.
입력값, 실행조건, 기대결과 등의 집합
요거를 테스트 케이스라고 할 수가 있죠.
이렇게 이어주시면 되는 거예요.
넘어갈게요.
아래 이미지는 애플리케이션과 데이터베이스가 구축되는 프로세스를
단계별로 나타낸 것이다 라고 되어 있습니다.
왼쪽이 애플리케이션이고 오른쪽이 데이터베이스예요.
데이터베이스 구축 단계가 쉽게 말하면 개논물입니다.
개, 논, 물이에요.
근데 개는 나와 있으니까
이 두 가지는 논하고 물이겠죠.
논리, 물리입니다.
그래서 논리 모델링, 물리 모델링, 개논물
이렇게 순서를 기억을 해주시면 되겠습니다.
다음은 여섯 번째 문제
클라우드 컴퓨팅은 통신기기를 이용해 언제 어디서나 다른 컴퓨터를 통해서
작업 데이터를 처리하는 기술인데
관련 서비스에 대한 설명이 해당하는 용어를 보기에서 찾아서 써라
라고 되어 있습니다.
여기 보면 다 AAS로 끝나죠.
요게 as a service인가 뭐 그렇습니다.
중요한 거는 요걸 얘기하는 거죠.
S기반, P기반, I기반, B기반이란 뜻인데
요 S는 소프트웨어, P는 플랫폼, I는 인프라,
B는 블록체인을 이야기하는 겁니다.
요 단어들이 보이는지를 확인하시면 돼요.
첫 번째는 인프라가 보이죠.
밑에는 하드웨어 및 소프트웨어, 플랫폼이란 뜻이에요.
여러가지 시스템이 다 구축이 되어있다는 뜻이기 때문에
요거는 플랫폼을 의미합니다.
자 그래서 요 기억은
요기 IAS, 그 다음에
이는 PAS가 정답이 되겠습니다.
자 일곱 번째
아래 C코드의 출력 결과는 무엇인지 쓰시오 라고 되어있고요.
아래쪽에 포문이 있는데
자 포문이 엄청 크죠.
1부터 2024까지 총 2024번을 반복을 하고 있습니다.
그럼 이걸 언제 다 하고 있나라고 생각할 수 있는데
패턴을 보시면 돼요. 패턴을 분석하시면 됩니다.
여기 보면은 요게 이제 주요점이죠.
이 I가 100으로 나누어 떨어지는 경우
말그대로 I가 100의 배수일 경우에
C가 어떻게 돼요?
0으로 초기화가 됩니다.
그래서 1부터 쭉쭉쭉쭉쭉 가다가
C뿔뿔 아니면은 C를 0으로 초기화하는 건데
C뿔뿔이 막 되다가 100이 되면 초기화가 되고
또 101, 102, 103, 103 막 쭉 가면은
C뿔뿔이 막 되다가 200이 되면 초기화가 되고
요렇게 될 거 아니에요.
자 그럼 결국엔 무슨 얘기에요?
100, 200, 300, 400, 500, 600
뭐 요런 단위로 계속 초기화가 되는데
제일 큰 수, 100단이 제일 큰 수가 여기서 2000이잖아요.
그러면 2000일 때 C가 다시 한번 0으로 초기화가 될 거에요.
그리고 나서 2001, 2002, 2003에서 2024까지 가겠죠.
그러면 2000부터 시작해서
요것만 체크를 할 수 있으면 됩니다.
자 그래서 2001때 0으로 초기화를 하고
그 밑에 일단은 2000도 4의 배수잖아요.
한번 체크됩니다.
발을 정제로 한번 체크를 해볼게요.
자 2001때 한번 추가가 됩니다.
자 그리고 4의 배수일때만이니까
2004일때 한번 되겠죠.
2008일때 한번 될 거구요.
2012일때 한번 될 거고
그 다음에 2016일때 한번 될 거고
2020때 한번 될 거고
2024까지입니다.
여기 등호 있죠?
2024일때 한번 더 증가를 할 거에요.
그러니까 결국에 C는 몇으로 증가를 해요?
7로 증가를 합니다.
2000까지 포함을 해야 돼요.
if, else가 아니기 때문에
한번씩 체크를 해야 되니까
결과적으로 정답은 7이 된다는 소리입니다.
네 넘어갈게요.
자 다음은
아래 C코드는 선택정렬을 구현한 것이다.
빈칸에 알맞은 코드를 써라.
라고 되어있습니다.
왼쪽은 숫자 개수 입력하고
정렬할 숫자들을 입력하는 거라서
뭐 크게 중요한 부분은 아니구요.
여기서 포인트는 여기 빈칸 부분이
항상 이 정렬이라는 코드에서
뭐라 그럴까요?
항상 나오는 패턴 같은 거에요.
그래서 요거를 반드시 좀 기억을 하시는 게 좋습니다.
일단은 니음부터 좀 볼게요.
요 3줄
요거는 제가 항상 말씀드리는 수합공식이죠.
형식을 다시 한번 말씀드릴게요.
C는 A
A는 B
B는 C
이런 식으로
요렇게 요렇게 같게 나옵니다.
요게 수합공식이에요.
이게 서로의 여기 가운데 있는
A, B 서로를 서로 교환해주는 코드입니다.
이게 없으면 정렬을 못해요.
반드시 들어가 있겠죠.
여기 보면은
요거랑 요거랑 같고
요렇게 같잖아요.
그러면 요렇게 두 개가 같겠죠.
그러니까 요 니은은
얘랑 똑같이 적어주시면 돼요.
A, R, R, Min 적어주시면
요 니은은 답이 되는 거구요.
반드시 나와요.
그 다음에 어떤 정렬이냐에 따라서
이 포문에 있는 이 부분이
조금씩 조금씩 바뀌거든요.
그 부분을 봐야 됩니다.
일단 지금은 선택정렬을 구현했다고 했죠.
선택정렬을 어떻게 하냐
그림으로 간단하게 표현을 하자면
얘를 하나 딱 선택해요.
그리고 나머지 애들의 최소값
또는 최대값을 구합니다.
그리고 얘랑 비교를 하는 거예요.
지금 같은 경우에는 이제
내림차선, 오름차선이 중요한 건 아니구요.
어쨌든
요렇게 하나씩 지정해서 바꾸고
그 다음 거 지정해서 바꾸고
왼쪽 건 정렬이 됐을 테니까
이런 식으로 되는데
그럼 여기까지만 체크를 하면
요렇게 두 개 비교하면 되잖아요.
여기까지 갈 필요가 없다는 거죠.
포인트는 이거예요.
선택정렬은
시작 위치 처음부터 진행을 하고요.
마지막 바로 전까지만 수행을 합니다.
이게 포인트입니다.
그래서 요게
마지막 바로 전까지라는 포인트가 잡혀야 돼요.
그래서 기본적으로
i, i로 시작을 하고 있으니까요.
n, n이 갯수예요.
여기 보면은 요게 갯수입니다.
마이너스 1까지만 진행을 하는 거죠.
요게 가장 기본적인 거구요.
요걸 의미하는 여러 다른 식이 들어갈 수 있습니다.
그래서 여기에 예를 들어
갯수를 입력하세요 라고 되어 있으니까
갯수가 몇 개인지를 몰라요.
그래서 지금은 n이 맞지만
이 갯수가 정확하게 예를 들어서
고정이 되어 있다고 치면은 10
고정이 되어 있다고 하면
여긴 당연히 10 빼기 1을 해서
9를 써도 됩니다.
숫자 9를 그래도 정답이 되겠죠.
근데 여기서는 얼마인지 모르니까
이 입력받은 갯수에서 1을 빼야 된다.
라는 개념으로 해서 이렇게 들어가는 거죠.
또는 여기에서 만약에 등호가 들어갔다고 하면
빼기 2가 돼야겠죠.
요런 식으로 요 개념을 맞춰서
수식을 넣어주시면 되겠다.
라는 겁니다.
잘 모르겠으면은
가장 정석적인 코드를 적어주시면 돼요.
다음
c 코드입니다 또.
여기 배열이 생성이 되어 있구요.
그 다음에
temp i a 나와 있고
포문이 돌아가고 있습니다.
포문이 돌아가고 있는데
이거 아까랑 똑같은 거죠.
요렇게 요렇게 같구요.
요렇게 요렇게 대각선으로 같아요.
swap
서로 데이터를 바꿔주겠다는 뜻이에요.
그러면 어떤 거랑 어떤 거를 바꾸는지를 봐야겠죠.
일단 i는 0부터 5 전까지니까
요거 차례대로
이동을 하겠다는 거구요.
이동을 하면서 어떻게 할 건지에 대한 게
요거겠죠.
어떻게 바뀔 건지.
그래서 보니까
3칸 오른쪽에 있는 거.
첨자에 플러스 몇을 한다는 얘기는
오른쪽으로 몇 칸 가겠다는 뜻입니다.
마이너스는 왼쪽이에요.
그래서
예를 들어서 0번째면
3번째 요소랑
그 다음에
첫번째면
네번째 요소랑
두번째면
다섯번째 요소랑
요렇게 바꾸겠다는 뜻이에요.
자 근데
여기서
이제 요 위치를 적어보면은
배열은 0부터 시작하니까
다섯번째 요소가 없습니다.
자 그러면
다섯번째 요소가 없을 때
어떻게 하냐면
요 %5가
다시 앞으로 되돌려줍니다.
그렇기 때문에
얘는 5가 아니라
0이 되는 거죠.
순환될 때
요 전체 개수로
나눠서 나머지를 취하면
요거를 계속 돌아요.
자 그래서
세번째는
첫번째
네번째는
두번째
요소랑
계속 바뀔 거다라는 겁니다.
자 근데
요렇게 바뀔 때
또 마찬가지
순차적으로 보셔야지
안그러면 또 헷갈려요.
하나씩 보도록 하죠.
일단은 원본을 적어볼게요.
요렇게
해놓고
또 바꾼다고 하면
자 0번째 요소가 이거고
세번째 요소가 이거란 말이죠.
요거 두개를 바꿔요.
그럼 이 결과를
일단 가지고 있으세요.
30
10
50
이 상태에서
또 이걸 하는 겁니다.
그래서
이거랑
뭐랑 바꿔요?
요거랑 바꿔야 되죠.
그래서 얘는
40
50
30
10
20
이 결과가 나옵니다.
그리고 나서
이걸 하는 거죠.
그러면 이거랑
뭘 바꿔요?
요거랑 바꾸죠.
그러면
012니까요.
30
50
40
그 다음에 10
여기가 20이죠.
요렇게
합니다.
그리고 세번째
첫번째 요소도 바꿉니다.
세번째가
지금 이거예요.
그리고
첫번째가 이거죠.
자 그러면
30
10
40
50
20이 됩니다.
그리고 마지막으로
네번째 요소
요거랑
두번째 요소가
012니까 이거죠.
요거 두개를 바꿉니다.
그러면
30
10
20
50
40이 됩니다.
요게 정답이에요.
요 배열에 있는 요소를
다 출력해주고 있죠.
띄어쓰기 해서
여기 지금 띄어쓰기 보이죠?
그러니까
30띄고 10띄고
이런 식으로
요렇게 입력을 해주면
정답이 됩니다.
우리가 앞에서부터
이게 그 뭔가요?
다른 기출문제도
이렇게 풀이를 제가 하면서
요 스왑이라든지
그 다음에
이 배열을 순회하는거
이런거 계속 말씀을 드렸기 때문에
이 정도 하시면 이해가 되실거고
이해가 안되시면
돌려보셔도 좋고
그 다음에 질문 게시판을 이용해서
어떤 부분이 좀 이해가 안된다라고
말씀을 해주시면
추가로 영상을 만들거나
아니면 추가로
댓글로 설명을 드리거나
하도록 할게요.
다음
자 코드 커버리지 중에
결정문 내부에
개별 조건식들의 결과가
참과 거짓일 때의 경우를
모두 한 번 이상
수행하는
테스트 커버리지는
무엇인지
표시오라고 되어 있습니다.
요거는
일단 결정문 내부
개별 조건식들의 결과가
참과 거짓일 때의 경우를
한 번씩 이상 수행한다라고
되어 있어요.
자 요거는
간단하게 설명을 한 번 드리면
결정문이라는 거는
전체를 얘기하는 거예요.
예를 들어서
파이선으로 기준을 한다고 하면
배열이 아니라 변수
a가 10 이상이고
b도 10 이상이어야 해요.
그리고 요거를
엔드로 묶었어요.
요 관계를 얘기하는 거죠.
요거 전체가
결정문이에요.
전체가
그리고 각각의 하나하나가
조건식입니다.
이 조건식의 결과가
각각
참하고 거짓일 때를
한 번씩
얘가
트루일 때
펄스일 때
한 번씩
나올 수 있게끔
케이스를 잡아라
라는 얘기입니다.
그래서
하나씩 하나씩
요 두 가지가
전부 t거나
따로 뭐 tf거나
이거는 상관없어요.
요렇게 두 가지 케이스만
있으면 됩니다.
이 두 가지 케이스에서
어떻게 해요?
트루가 두 번 나왔고
펄스가 두 번 나왔잖아요.
그럼 ok라는 거죠.
요게
조건 커버리지입니다.
원래
이 트루 펄스라고
나올 수 있는
경우의 수가
이거 말고도
요렇게
요렇게가 있잖아요.
이렇게 총 네 가지죠.
그러면
이 위에 두 개 안하고
아래에 두 개를 해도
괜찮습니다.
이걸 하거나
둘 중에 하나만 하시면 돼요.
이게
지금 보고 있는
조건 커버리지입니다.
왜냐면
위쪽에 있는 두 개도
둘 다
트루 펄스가
한 번씩 나왔고
아래쪽에 있는 두 개도
둘 다
트루 펄스가
한 번씩 나왔죠.
그러면
어떤 경우를 사용해도
일단 조건 커버리지는
만족을 한다는 뜻이에요.
요게 이제
조건 커버리지의
개념입니다.
어쨌든
여기서는 개별 조건식들의
결과가
참 거짓이 나와야 된다
라는 개념이
조건 커버리지다.
요것까지만
기억을 하고 계시면 돼요.
11번입니다.
아래 설명을 읽고
빈칸에 해당하는
해시 함수를 쓰세요.
요건 단순히 암기죠.
자
제곱한 결과
제곱법이에요.
어렵지 않죠.
제곱법
적어주시면 되고
그 다음에
숫자의 분포가
고른 부분을
분석해서
숫자를 분석하는 겁니다.
숫자 분석법이에요.
숫자
분석법
이구요.
그 다음에
키의 값을
다른 진법으로
변환한다.
다른 진법으로
요게
기수를 변환한다고
표현합니다.
기수 변환법이에요.
그래서 총 세가지를
적어주시면 되겠습니다.
만약에 이게
영어로 나와있으면
보기가 있었을 거에요.
넘어가서
12번입니다.
아래 c코드는
배열 요소들의
평균을 출력하지만
오류가 발생을 한대요.
그 이유를
약소를 하라고
되어 있습니다.
왜 그런지 좀 보죠.
a 배열이
하나 만들어져 있구요.
밑에 n에다가는
뭘 하고 있냐면
사이즈 오브
배열명
사이즈 오브
첫번째 배열 요소
이렇게 되어 있어요.
전체 배열의 크기를
배열 하나의
크기로 나눈다.
결국에
몇 개인지를
체크하겠다는 뜻이에요.
그러니까
지금 이건 5가 되겠죠.
하고
이제
인트형
정수형 변수
s와
avg를
보통 avg가
애버리지 약자니까
여기다 평균을
집어넣을 것 같죠.
여기서 포인트죠.
일단은
평균을
정수로
구해야 된다.
라는 거죠.
자 그래놓고
좀 보겠습니다.
일단은
s에다가
모든 배열 요소를
다 누적을 시켜요.
그리고 나서
이 누적시킨 걸
실수로 바꿉니다.
예를 들어서
여기 있는 게
하필 300이라고 치면
아직 계산은
제가 안했습니다만
300.0이 되는 겁니다.
더블이니까요.
그리고 그거를
나누기
n이 5였으니까
이렇게 나누는 거예요.
그럼 결과가
어떻게 될까요.
더블
나누기
인트기 때문에
결과가 더블로 나옵니다.
그러면
60.0이 되겠죠.
이렇게
그 60.0을
avg에다
집어넣어요.
근데 avg는
지금 현재
avg는
무슨 타입이다.
인트 타입이다.
그러면
.0이 날라가고
60만 들어갑니다.
이 60만 들어간
avg를
다시 출력을 해주는데
어떻게 출력하고 있어요.
더블 형태로
출력하라고 되어 있습니다.
근데 이미
소수점은 날라갔어요.
정수가 들어가 있어요.
정수를
실수형으로 출력하면
당연히
문제가 발생하겠죠.
자 그래서
무슨 얘기냐.
실수로 계산된
값을
정수형 변수에
할당을 했는데
그 정수형 데이터를
다시
실수 형태로
출력을 한다.
요 상황이 지금
오류가 발생을 하는 이유입니다.
이해되시죠.
그래서
정수로 계산된
결과 값을
다시 실수로 출력한다.
라는 문장이 들어가면
정답 처리가 될 겁니다.
넘어갈게요.
아래의 수강정보 테이블에
요 밑에 있는 데이터를 추가하는
sql 문장을
작성해라 라고
돼있습니다.
풀로 작성을 해야하는
상황인데
그렇게 어렵진 않죠.
일단은 데이터를 추가하는
sql문 문법을
알고 있어야겠죠.
insert
into
띄어쓰기 하고
그대로 쓰시면 됩니다.
그리고
테이블 명
그리고
value z에요.
value
es
하고 여기다가
여기 있는 요소를
하나씩 다 씁니다.
보면 다 문자열이죠.
작은 따옴표 해가지고
여기 있는 건
하나씩 하나씩
심표로 해서
쭉 적어주시면 돼요.
요렇게 적어주시고
여기에는 수강정보가
들어가겠죠.
요렇게
펜으로 글쓰기가
좀 어려워가지고
어쨌든 요 요소를
하나씩 집어넣으면 된다는
소리입니다.
요기 하나하나에
요렇게 하고
완벽하게 하려면
마지막에 세미콜론까지
세미콜론을 하나하나
보통 이제
오답 처리를 하거나
그러진 않거든요.
정석인건
그거다
라고 말씀을 드리는 거니까
요렇게 해서
적어주시면 되겠습니다.
포인트는
인설트
인투
밸류즈
요거까지
보시면 되겠다라는 거죠.
넘어가서
14번입니다.
이것도 SQL 문장인데요.
오더즈 테이블과
오더즈 테이블을
참조하는
외래키 제약 조건이 있는
모든 테이블
관계된
오더 테이블과 관계된
테이블을
모두 삭제하고 싶다는 뜻이에요.
자 일단
테이블을 삭제해야 돼요.
딜리트인가요
아니죠.
드롭입니다.
테이블을 삭제하는 거는
딜리트가 맞는데
테이블을 삭제하고 싶은 거예요.
그래서 드롭이 맞습니다.
드롭 테이블
테이블 명을 적어줍니다.
o r d e r s
여기까지만 적으면
그냥 오더 테이블만
사라지는 거예요.
근데 옵션이 있죠.
같이 연관되어있는
모든 테이블도
같이 삭제를 해라.
요게
캐스케이드죠.
여기까지 적어주시면
답이 되겠습니다.
캐스케이드 말고
연결되어있는 게 있으면
지우지 마세요.
라는 건 리스트릭트입니다.
요거 알고 계시죠.
요거까지
요것도 단순 암기인데요.
비대칭키
대칭키와 비대칭키가 있는데
비대칭키
공개키라고도 하죠.
암호 알고리즘을 모두 찾아라.
여기
이건 쉽게 찾을 수 있으셔야 돼요.
이거랑
요거
여기까지가
비대칭키입니다.
나머지는 대칭키예요.
자 넘어가 볼게요.
아래 자바코드에
출력 결과를 쓰시오
라고 되어있습니다.
요번에는 문제들이
그렇게 많이 어렵진 않네요.
어쨌든
스트링 해가지고
문자열 객체가 총
3개가 나와있습니다.
드림이 들어가있는
그리고
A
가 할당되어있는
그리고
뉴 스트링 드림 해가지고
똑같은 드림이 들어가있는데
요거 구조를 잘 보셔야 돼요.
자 일단은 드림
이거는
할당되기 전에
드림이 일단 만들어지잖아요.
그러면
어딘가에
드림이 있는거예요.
이렇게 있는 상태입니다.
그리고
이 객체참조 변수 A가
얘를 이렇게 참조하고 있는
상태인겁니다.
그리고 또 B가 만들어지죠.
이것도
드림이라고 써있잖아요.
똑같은 드림이면
이거는 그냥 같은거라고
판단합니다.
그래서 같은걸 그냥
이렇게 가리키고 있어요.
이미 존재하니까
새로 만들진 않는거죠.
그리고
C는 어떻게 해요?
A를 참조하고 있죠.
근데 A도 이거잖아요.
그러니까
A가 이렇게 가는거예요.
똑같은 곳을
계속 가리키고 있다.
이렇게 보시면 됩니다.
자 근데 D는
D는
뉴 스트링 드림이라고
되어있잖아요.
그러면
새로운 문자를 만들라는
소리예요.
그렇기 때문에
존재하더라도
새로운 드림을
하나 만듭니다.
그래서 얘를 가리키죠.
요 상태예요.
이 상태에서
확인을 하는겁니다.
자 얘네들은
다 객체참조 변수이기 때문에
객체참조 변수를
서로 같은지를
비교한다는 얘기는
같은 객체인지를
비교하겠다는 뜻이에요.
자 A하고 B는
같은 객체를
지금 가리키고 있기 때문에
요거의 결과는
투류입니다.
그리고
A하고 D를 보세요.
A는
이걸 가리키고 있는데
D는
요걸 가리키고 있죠.
문자열은
똑같은데
객체가 서로
다르기 때문에
얘는 펄스예요.
구분되시죠?
자 그러면
내부 요소가
같은지를 비교할 때
어떻게 해야되냐
equals를
사용하셔야 돼요.
C.equals
그러니까
여기서
equals D
이렇게 가고 있는 거죠.
그러면
여기 요소랑
여기 요소랑 같니?
이걸 물어보는 겁니다.
근데 드림드림
같잖아요 요소는.
객체는 다르지만
그래서 요건
투르입니다.
그래서
결과가
true, false, true
이렇게 나오는데
지금 보면
println이죠.
세로로 적어주셔야 돼요.
세로로.
true
그 밑에
false
그 밑에 true
이렇게 적어주셔야
정답으로 인정이 됩니다.
자 다음
요것도
간단한데
엄청 헷갈릴 수 있는
요소입니다.
좀 볼게요.
아래
파이썬 코드는
프로그래밍
이즈
그레이트
이곳을 출력한다고
되어 있어요.
그레이트를
자 그러면
A, B, C를 했을 때
요렇게 출력이 된다는
얘기는
A가 프로그래밍이구요
B가 이즈구요
C가
그레이트란 뜻이에요.
요렇게 나올 수 있게끔
슬라이싱을
해라
라는 의미가 됩니다.
자 근데
좀 길잖아요.
그러니까
요거를 좀
잘 생각하셔야 돼요.
적어보죠.
일단
얘가 0이에요.
1
2
3
4
5
여기가 6이죠.
빈칸도 잘 세셔야 됩니다.
7
8
9
10
11
자 이거 귀찮다고
생각하지 마시고
꼼꼼하게 하시는 게
제일 베스트예요.
항상
하나 차이로
틀리잖아요.
적어볼게요.
계속
12
13
14
15
16
여기가 17이죠.
요게 조금 헷갈리면은
위아래로 번갈아가면서 써도 됩니다.
좀 넓게 쓸 수 있죠.
그러면 18
19
20
21
22
23
24
25
보통 이제
이런 것들을
이렇게까지 길게 안 나오니까
이렇게 하는 연습을
한다고 생각을 하세요.
이 문장까지 보고는
읽지 않기 때문에
자 여기가
29죠.
그 다음에
여기가
30
40
41
31 가는데
이 랭기지는
결과가 안 나오니까
여기까지만 쓸게요.
이 상태에서
지금 A에 뭘 집어넣고 싶어요?
프로그래밍을 집어넣고 싶어요.
그러면 프로그래밍이
어디서부터죠?
여기 18부터죠.
이거는 형광펜으로
여기서부터예요.
그리고 어디까지죠?
28까지입니다.
여기까지예요.
자 근데
슬라이싱은 항상 어떻게 하죠?
시작부터
끝 전까지만 가지고 옵니다.
그래서
18부터
28까지
가지고 오고 싶으면
18
땡땡
29라고 적어주셔야
28번째 요소까지
슬라이싱을 합니다.
생각 잘 해주셔야 돼요.
어쨌든 이렇게
넣어주시는 거고
그 다음에
이즈잖아요.
이즈는 여기 있죠.
7하고 8만 가지고 오면 돼요.
그럼 어떻게 한다고요?
7 땡땡 8이 아니라
7 땡땡 9
한 칸 더 가셔야 돼요.
자 같은 의미로
이제
그레이트가 여기죠.
12부터 시작해서
16까지예요.
그러면 12
땡땡
16이 아니라
한 칸 더 가서 17
여기까지 이렇게 적어주셔야지
답이 됩니다.
슬라이싱은 이렇게 진행이 되죠.
이렇게만 또 쓰면 안 돼요.
앞에 요거 S를 붙여줘야지
요 S에서 슬라이싱을 한다는 걸
알 수 있겠죠.
그래서 이렇게
숫자 계산만 하셔서
틀리지 마시고
이렇게까지 적어주셔야 된다.
라는 것까지
정리를 하시면 되겠습니다.
자 다음에
18번 또 파이썬 코드인데요.
아래 파이썬 코드를 수행했을 때
변수 D값이
여기 D 7번 행에 있죠.
저장되는 위치가
기억, 니은, 디귿, 리을 중에
어디냐를 물어보고 있는 겁니다.
일단 보도록 할게요.
변수가
A, M, D, M, A
이렇게 쭉 있고요.
아래쪽에 포문으로
요 S 리스트의 요소를
하나씩 여기에 집어넣고 있어요.
그러니까 기억 요소 한 번
니은 요소 한 번
디귿 요소 한 번
리을 요소 한 번씩
I에 들어가는 건데
요 I에 들어가는
요 각각의 요소가
어떻게 생겼냐면은
사전 형태입니다.
딕셔너리에요.
딕셔너리는
요기 앞에 나와있는
요 키워드를 가지고
데이터를 접근할 수 있는 앱니다.
그래서
여기 밑에 보시면은
이런 형태로 접근을 하는 거죠.
I, 뭐 숫자
뭐 이렇게 나오는 게 아니라
I하고 키워드가 나와요.
요렇게 이제 보시면 돼요.
일단 그러면 하나씩 보도록 하죠.
가장 먼저
첫 번째 요소가 I에 들어가 있어요.
제가 하이라이터로 표시를 해놓겠습니다.
요게 들어가 있다고 생각하고
접근을 하시면 됩니다.
요건 지우고
자 그래서
요 S 오버 값이
요 C 지금은 12죠.
이 값이
D 이상인지를 보고 있어요.
D는 10이에요.
요건 여기 적어놓으면 되겠죠.
10 이상이면서
그죠. 10 이상이면서
그 다음에 S 데이터
요 부분이죠.
요 값이 0인 경우
를 물어보고 있습니다.
지금 성립이 되죠.
성립이 될 경우에
여기 봅니다.
M 이라는 값이
여기 지금 100이죠.
이렇게 써놓을게요.
M 이라는 값이
I S 오버
S 오버 지금 12잖아요.
12
빼기
D
빼기 D는
마이너스 10이죠.
요렇게 했을 때
이 식이 성립이 되냐는 거예요.
성립이 되죠.
12 빼기 10이면은
E 잖아요.
여기서 성립이 되죠.
성립이 되면
어떻게 해요.
요 M 값을
어떻게 한다.
방금 계산했던
요 값으로 바꾼다고 하고 있습니다.
이 위에랑 아래랑 값이 똑같거든요.
살짝 지울게요.
여기 보시면은
잘 따라오셔야 돼요.
요만큼이랑
이만큼이랑 값이 같잖아요.
그러니까 방금 위에서
우리가 계산해서
E라는 걸 알았죠.
그러니까 M에는
E가 들어가는 거예요.
결국에
요게 지금
잠시만요.
헷갈리지 않게
요게 현재 지금
M 값인데
요 에고
죄송합니다.
다시
M 값인데
요 M 값이 100에서
E로 바뀌는 순간입니다.
그래서 요거 바꿀 거예요.
요거를
E로 바꾸고요.
그리고 그 밑에 어떻게 합니까.
A에다가는
I 값을 집어넣고 있어요.
이 I 값이라는 게 뭐냐면
요 딕셔너리 자체를 얘기하는 겁니다.
A라는 애가
지금 현재
요 딕셔너리를 가리키게 되는
이 딕셔너리를 저장하고 있게 되는
이런 상태가 되는 거예요.
자 일단 요 상태입니다.
그리고 넘어갈게요.
이번에는
딕셔너리가
요놈의 I로 들어가는 겁니다.
그 다음 반복이니까요.
위쪽 건 지울게요.
요 상태예요.
그 밑에 있는 건 똑같아요.
자 그러면
요 공식은 똑같습니다만
요 조건을 일단 봐야겠죠.
일단은 10 이상인지 체크를 해야 되고요.
10 이상 맞죠?
그리고 0인지 체크를 하는 거예요.
근데 0이 아니네요.
여기 8이라고 되어있잖아요.
그러니까 애초에 요거는
요 첫 번째 입에서 땡이에요.
그럼 끝납니다.
이 상태로 다시
그 다음 요소가 넘어가는 거죠.
그래서 그 다음에는
요 디귿
요놈이 들어가는 거죠.
자 계속해서 보도록 하죠.
요거랑 요거 보는 건데
10 이상 맞고요.
그 다음에 0인 것도 맞아요.
자 그러면 다시 보는 거죠.
자 요기
지금 M이 현재 2인데
12가 아니라 지금 10이잖아요.
요기 요소가
그러면 10-10인 거예요.
D는 항상 고정이니까
여기 보면 D는 항상 고정이죠.
자 10-10입니다.
그러면 0이죠.
그럼 0이 2보다 큰지
물어보고 있는 건데
아니죠 아니죠.
2가 0보다 큰지를 물어보고 있는 건데
맞잖아요.
그러면 요걸 또 수행하는 거죠.
요거.
그래서 요 M이
2에서 0으로 바뀝니다.
그리고 A는
다시 i 값을 넣는 거니까
현재 i가 요 노란색이잖아요.
그래서 요거를 하지 않고
얘를 가리키게 되는 거죠.
요 상태가 됩니다.
자 그래 놓고
다음으로 또 넘어가는 거죠.
그러면 요거는 지우고
이제 마지막 요소를 체크합니다.
요 놈이죠.
여기서
요거랑 요거를 체크를 하게 되겠죠.
일단 10이상 맞고요.
0도 맞아요.
그럼 요건 일단 OK입니다.
그러면 이제 요거 체크하겠죠.
요게 지금 현재
요게 14가 되는 거죠.
14에서 이제 10을 빼면은
4잖아요.
이 4가
얘보다 작은지를 물어보고 있는데
작지 않잖아요.
그럼 요게 진행되지 않습니다.
결국에 현재 A는
요 놈이죠.
전체를 다 반복을 끝낸 다음에
자 이 D긋인데
이 D긋의 S 데이터에다가
D. 요 D 값을
집어넣고 있어요.
요기다 집어넣는 거죠. 요렇게.
아 요 위쪽이에요. 죄송해요.
요 위쪽에다 집어넣는 거죠.
그래서 결국에 변수 D까지 저장되는 위치는
D긋이다.
요렇게 정리를 하면 되겠습니다.
자 다음
자 19번 문제입니다.
파이썬 코드인데요.
일단은 M이라는 변수에는
6, 7, 9, 0, 0
들어가 있고요. V라는 리스트에는
5만, 만, 오천,
천, 오백, 백. 이거 돈 같죠?
6만 7천 9백원이고 밑에는 5만원권
만원권 뭐 이렇게 써있는 것 같은데
거기에
어떤 값들을 집어넣고 있는지를 보는 거예요.
자 어펜드 해가지고 집어넣는
걸 보는 건데 파이썬에서 요거 조금 헷갈리죠?
요거는 목수를 구하는 겁니다.
M을
I로 나눴을 때 목시예요.
요 I가 지금 여기 있는 요소 하나씩 하나씩
보는 거거든요? 그러면
6만 7천 9백원에서
5만을 나눴을 때
목시 어떻게 되죠?
1점 얼마가 되겠죠? 2점 넘어가려면
10만원이 돼야 되는 거니까
그러니까 1점 얼마니까 목시 1이죠.
그러니까 요 A라는
배열에는
해놓을까요?
일단 1이 추가됩니다.
그리고 밑에 요거
자 요게 어떤 코드냐면
나머지
부분만
정리를 하는 건데요.
일단 볼게요.
일단은 괄호 안에 있는 걸 먼저 계산하는 거니까
이걸 먼저 볼게요. 요거.
요게 1입니다. 지금 우리가 5만 했잖아요?
요게 1이죠?
그리고 다시 어떻게 해요?
I를 곱해요. I가 지금 5만이잖아요?
그러니까
5만을 곱하게 되겠죠?
그럼 이제 5만인데
그거를 이제 요 M에서
빼고 있죠.
나머지만 남기는 거예요. 실제로.
요거는 간단하게
표현하면 요겁니다.
이거예요. M을
I로 나눴을 때 목시 위에
있는 애고요. 요게 나머지를
구하는 거예요. 근데 이렇게 써있으면 너무 간단하니까
이거를 풀어 쓴 겁니다.
요게 이거랑 같은 M입니다.
자 그래서
나머지를 계산해서
나머지를 다시 M에다 집어넣겠다는 거죠.
그러니까
17,900원이
요 M에 다시 들어가 있겠죠?
자 그러면 다시 반복을 진행을
해요. 이번에 5만이 아니라 만 원이죠?
만 원이 여기 들어갑니다.
나눠봐요. 그러면
17,900원이니까
1점 얼마가 나올 거 아니에요?
마찬가지 목수를 구하는 거니까 또 1이 되겠죠?
그리고 요 만을 또 뺍니다.
이 자리에서. 그럼 7,900이 남아요.
그럼 이걸 다시 또
5,000이랑 계산을 해보는 거죠.
마찬가지 또 1점 얼마죠?
그러면 1이 추가되고요. 실제로
5,000을 뺍니다. 그러면
2,900이 되겠죠.
이거를 또 1,000으로
나눕니다. 그러면
2점 얼마가 나오겠죠? 이번에는.
그래서 여기서는 이제
2가 추가가 되는 거고요.
그리고 실제로 2,000원을 빼게 되면
900원이 남아요.
900원은 500으로
나눠보는 거죠. 그러면 또 한 개가
계산이 될 거고요. 400원이
남아요. 이번에는. 그리고 나서
100으로 나누는 거니까
마지막에 4가 되겠죠.
이렇게 정리가 됩니다.
그래서 출력하면
이 대가로 포함해서 요만큼이
정답이 되는 겁니다.
결국에 목과
나머지를 구하는 연산을 가지고
이것저것을 해본 건데 우리가
거슬러줄 때 하는 그런 거랑
비슷한 거라고 보시면 돼요. 대신에
나머지 연산을
나머지 연산 없이 구현을 하면
요런 식으로 구현을 할 수가 있다.
요거를 좀 배워가는
문제라고 생각하시면 되겠습니다.
넘어가 볼게요.
마지막 문제입니다.
파이썬코드의 수행 결과를 쓰시오
라고 되어 있어요. 요거를
처음 보신 분들도 계실 텐데 요거
많이 풀어보셨으면 파이썬 공부 좀 해보셨으면
몇 번씩 보셨을
메소드죠.
여기 보면 .pop 이라고 되어있는 부분.
pop 이라는 거는
값을 뽑아서
사용을 하고요.
그 다음에 뽑은 값은 지운다
라는 뜻이에요.
원래는 예를 들어서 인덱싱 같은
경우라고 생각해보면
s0 이라고 하면 요 a 를 얘기하는
거죠. 이거는 그냥 갖다 쓰기만
하고 그냥 놔두는 거잖아요.
근데 pop을 사용하면 a 를 쓰고
a 를 지워버립니다.
추출하는 거죠. 요 차이예요.
pop이.
다시 이야기를 해보면
이 pop 제로가
이 제로라는 거는 0번째 요소를
출력하겠다는 거고요.
아무것도 안 써있으면 가장 오른쪽에 있는 걸
가지고 오겠다는 뜻이에요.
이건 맨 앞에 이건 맨 뒤에
이렇게 알고 계시면 되겠죠.
그래서 보도록 할게요.
t 에다가
비어있는 t 에다가
텅 비어있습니다.
t 에다가 s 에 있는
첫번째 0번째 요소를 뽑아서
추가를 한다고 되어 있어요.
여기에 추가가 되겠죠.
그리고 요거는 삭제됩니다.
그리고 나서 똑같은
작업을 또 해요.
이제는 0번째가 이거겠죠.
없어지고
append. append는 계속 끝에 추가되는 거니까
b 이렇게 추가됩니다.
또 한 번 더 해요.
c도 없어지고 여기에 추가되겠죠.
여기까지가
요 3가지입니다.
자 그래놓고 어떻게 하는지 보세요.
이번에는 t 에다가
s 가 아니라 t 에 있는 걸
오른쪽 끝에 있는 걸 뽑아요.
요게 없어지겠죠.
그리고 a 에 누적을 시킵니다.
a 가 원래 비어있었거든요.
요것도 표현을 해보면
이렇게 되어있고 여기가 이렇게
c 가 누적이 되겠죠.
문자도 누적됩니다.
그리고 또 뽑아요.
b 를 없어지겠죠.
그리고 a 에 누적시키면 b
이렇게 들어가겠죠.
그리고 맨 처음 했던 과정입니다.
s 에서 하나 뽑습니다.
s 에 하나 남았거든요.
d 를 뽑아서 t 에다가 집어넣어요.
그러면 a 바로 옆에
이렇게 추가가 되는 거예요.
지금 요거 두 개는 없는 겁니다.
그 상태에서 또 t 에서 끝에 있는 걸 뽑아요.
이번에는 d죠.
그러면 d 가 여기 들어갑니다.
그리고 또 삭제되고요.
그리고 한 번 더 뽑아요.
a 남았네요. 삭제되고 여기에 추가됩니다.
그리고 a 를 출력한다라고 하면
c, b, d, a 가 되겠죠.
자 요거는
스택 연산을 구현해본 거예요.
우리가 스택 자료 구조를 배우잖아요.
뽑아서 집어넣고 하는 거.
그거를 이제 구현해봤다.
이렇게 보시면 돼요.
스택이 완벽한 건 아니고
이런 식으로 뽑아서 쓸 수 있다.
그런 얘기라고 생각하시면 됩니다.
스택은 앞에서 뽑지는 않지만
어쨌든 이런 형식의 비슷한 코드를
구현해놓은 문제라는 거죠.
여기까지 보도록 하겠습니다.
고생하셨습니다.
