본문 바로가기

C++ 학습/C++ 코딩인터뷰[4장]11

[4. 기본자료형] 4.11 직사각형이 겹치는 확인하기 Q 4.11 사각형이 겹치는지 확인하기X, Y축에 평행한 직사각형 두 개가 주어졌을 때, 이 두 사각형이 겹치는지 확인하는 프로그램을 작성하라.X, Y축에 평행한 직사각형은 겹치는 경우보다 겹치지 않는 경우를 생각하는것이 조금 더 빠르다.해당 코드와 코딩결과는 다음과 같다. 2025. 1. 8.
[4. 기본자료형] 4.10 임의의 숫자를 균등한 확률로 생성하기 Q 4.10 임의의 숫자를 균등한 확률로 생성하기0혹은 1을 같은 확률로 생성해 내는 임의의 숫자 생성기가 주어졌을 때, a와 b사이의 임의의 자연수 i를 생성하려면 어떻게 해야 할까?단, 여기서 [a,b] 사이의 모든 값은 같은 확률로 생성되어야 한다.임의의 숫자 생성기가 2번 호출되면 [00, 01, 10, 11] 중의 한가지의 결과값을 생성하고,=>3번 호출되면 [000, 001, 010, 011, 100, 101, 110, 111] 중 한가지의 결과값을 생성한다.이때 1~6사이의 숫자를 호출하고 싶으면 그 결과가 000~ 101 사이의 값 + 1 일때로 설정하고,110 111 일때는 숫자호출기를 다시 3번 호출하는 방법을 사용하면 된다.이때 숫자를 다시 생성할 확률은 2/8 이며, 두번 다시 생성.. 2025. 1. 8.
[4. 기본자료형] 4.9 회문 확인하기 Q 4.9 회문 확인하기회문이란 앞으로 읽는것과 뒤로 읽는것 모두 동일한 문자열을 말한다.Ex) 회문O : 1, 7 ,11 ,121, 333, 2147447412회문X : -1, 12, 100, 2147483647이때 주어진 10진수 숫자가 회문인지 아닌지 확인하는 프로그램을 작성하시오.음수는 회문이 될수없다.최상위 숫자와 최하위 숫자를 만날때까지 자릿수를 비교하는 방법을 사용하면 시간복잡도 O(n), 공간복잡도 O(n) 이 된다.공간복잡도를 줄이기 위해 다음과 같은 방법을 사용할까 한다.최상위 숫자와 최하위 숫자가 서로 같은지를 확인하고 같으면 서로 삭제,다르면 false를 return 하는 방법을 사용하려고 한다.ex) 157751 이라면 1 == 1 이므로 서로 삭제하고 5775 의 숫자를 확인한다.. 2024. 12. 26.
[4. 기본자료형] 4.8 숫자뒤집기 Q 4.8 숫자뒤집기정수값이 주어졌을 때, 그 숫자를 뒤집어서 출력하는 프로그램을 작성하라.Ex) 42 -> 24, -314 -> -413간단한 방법으로 문자열로 바꿔서 뒤집는 방법이 있다.하지만 문자열 사용하지 않는다면 10으로 나눈 나머지를 거꾸로 출력하면 된다.해당 코드와 코딩결과는 다음과 같다. 2024. 12. 26.
[4. 기본자료형] 4.7 power계산하기 Q 4.7 power계산하기double x 와 int y 가 주어졌을때 x^y를 계산하라.(오버플로우는 무시해도 좋다.)가장 먼저 생각하는 방법은 x를 y-1번 곱하는 방법이다. 이 방식은 시간 복잡도가 O(n2)이 된다.따라서 조금더 효율적으로 만들기 위해서는 전체 곱셈 횟수를 줄여야 한다.지수의 특징을 사용해서 y의 최하위 비트가 0이라면 (x(y/2))2 의 결과와 같은 값이 나온다.y의 최하위 비트가 1이라면 x dot (x(y/2))2의 결과와 같은 값이 나온다.해당 코드와 코딩결과는 다음과 같다. 2024. 12. 26.
[4. 기본자료형] 4.6 산술 연산자 없이 나눗셈 계산하기 Q 4.6 산술 연산자 없이 나눗셈 계산하기양의 정수 x와 y를 나눈 몫을 구하라. (제목은 산술 연산자 없이 이지만 덧셈, 뺄셈, 쉬프트 연산은 허용한다.)x = 50 에서 y = 4을 나눈다고 할때 다음과 같다. 이때 y의 비트 자릿수를 x와 동일하게 만들어 빼준다.    110010-   100000   ...1번---------------      10010      1번의 값 100000 을 결과값에 저장. 그후 y의 자릿수를 10010과 동일하게 만들어 빼준다.-     10000   ...2번---------------             10      2번의 값 10000 을 결과값에 저장. (결과값 = 몫) 남은값을 y와 비교해 작으면 결과값을 리턴한다.해당 코드와 코딩결과는 다음과 .. 2024. 12. 26.