문제 : https://www.acmicpc.net/problem/27468

 

27468번: 2배 또는 0.5배

첫 번째 줄에 조건을 만족하는 수열이 존재한다면 YES, 아니라면 NO를 출력한다. 만약 그러한 수열이 존재한다면, 두 번째 줄에 $N$개의 정수 $A_{1}, A_{2}, \cdots, A_{N}$를 출력한다. 정답이 여러 개 존

www.acmicpc.net

 

문제 요약

1~N 까지 정확히 한번 사용

인접한 세수 A, B, C가 |A-B| = |B-C| * 2 혹은 |A-B| = |B-C| * 0.5를 만족

 

 

문제 분류 : 애드혹

 

 

C++

소스코드 : https://github.com/cbkpar/BOJ/blob/main/boj_27468.cpp

채점 번호 아이디 문제 번호 결과 메모리 시간 언어 코드 길이
66934093 cbkpar 27468 100점 2020 KB 200 ms C++17  673 B
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int iN;
	cin >> iN;

	cout << "YES" << "\n";
	if (iN % 4 == 2)
	{
		for (int i = 1; i <= iN; ++i)
		{
			if (i % 4 == 1) cout << (i + 1);
			if (i % 4 == 2) cout << (i - 1);
			if (i % 4 == 3) cout << i;
			if (i % 4 == 0) cout << i;
			cout << (i == iN ? "\n" : " ");
		}
	}
	else
	{
		for (int i = 1; i <= iN; ++i)
		{
			if (i % 4 == 1) cout << i;
			if (i % 4 == 2) cout << (i + 1);
			if (i % 4 == 3) cout << (i - 1);
			if (i % 4 == 0) cout << i;
			cout << (i == iN ? "\n" : " ");
		}
	}

	return 0;
}

 

문제 풀이

주어진 N을 4 단위로 생각한다.

 

주어진 N을 4로 나머지연산했을 때 2인 경우

2+4x, 1+4x, 3+4x, 4+4x (x = 0,1,2,3,...)를 반복해서 출력한다.

-> [2 1 3 4] [6 5 7 8] [10 9] 

-> 간격 : 1 2 1 2 1 2 1 2 1 로 반복되게 된다.

 

주어진 N을 4로 나머지연산했을 때 2가 아닌경우

1+4x, 3+4x, 2+4x, 4+4x (x = 0,1,2,3,...)를 반복해서 출력한다.

-> [1 3 2 4] [5 7 6 8] [9 11 10 12] 

-> 간격 : 2 1 2 1 2 1 2 1 2 1 2 로 반복되게 된다.

프로그래머스에서 이번 데브매칭에서 PCCP 기회를 주어서 응시하게 되었다.

 

 

일반적인 데브매칭에서는 모바일로 문제 푸는 모습만 나오게 촬영하면 되었지만

이번 시험에서는 규정이 상당히 까다로웠다.

 

큰 차이점은 주변환경을 촬영해야하는 것과 웹캠을 사용해야하는 것

또한 신분증도 촬영해야 하는데 사전테스트에서 미리 등록해 뒀었는데 다시 촬영할 필요가 없었다.

웹캠을 사용해야 하기때문에 부득이하게 노트북으로 테스트를 응시하였다.

(작은 모니터로 푸는게 쉽지 않았다.)

 

시험 1시간 전 입장가능하며 20분 전에는 입장이 불가능하다.

시험입장 후 대기하는 동안 중간중간 공지사항이 올라오며 따라서 이행하면 된다.

 

 

시험 후기

문제 난이도는 아무래도 인터넷 검색이나 IDE가 사용이 금지되어있기 때문에

고난도의 문제는 내지 않는 것으로 보였다.

기본적인 유형과 애드혹스러운 문제에 충실해서 내는 것 같았다.

기본 채점셋은 공개해 주지만 히든 테스트 셋은 공개해주지 않아 정답이 맞는지 긴가 민가 하였다.

 

 

시험 팁

시험시간은 2시간이지만 시험문제는 4개 이므로 시간 배분을 적절하게 해서 처리해야 한다.

모르는 문제에 계속 시간을 투자하지 말고 다음 문제로 넘어가서 풀다가 돌아오는 게 더 좋을 수도 있다.

실행 결과 테스트가 모두 맞았다고 해서 정답은 아니다 예외처리하지 못했거나

문제에서 요구하는 시간복잡도 내에 풀었는지 다시 한번 확인하는 게 좋다. (지문을 꼼꼼히 읽자)

IDE가 사용불가능하므로 자동완성이 되지 않기 때문에 응시언어의 자료구조의 함수들은 어느 정도 외워가는 게 좋다.

ex) insert, push, push_back, 인지 헷갈려 컴파일 에러가 나는 경우가 있다.

정 모를 경우 위에 레퍼런스를 눌러보면 해당자료구조의 기능들이 자세하게 나타나있다.

 

 

시험 결과

예외처리를 완벽하게 하지 못한 것과 특정 문제를 풀지 못해 감점을 받은 것으로 생각된다.

그래도 부분점수를 통해 LV.4를 턱걸이로 넘을 수 있었던 것 같다.

부족한 부분을 다시금 깨달을 수 있었던 좋은 시험이었다.

'후기' 카테고리의 다른 글

[플레이엑스포] 게임 관람 후기  (0) 2023.05.14
[Codeforces] Round 862 Div.2 후기  (0) 2023.04.03
[Codeforces] Round 860 Div.2 후기  (0) 2023.03.27
[Codeforces] Edu Round 145 후기  (0) 2023.03.25
[Codeforces] Round 856 Div.2 후기  (0) 2023.03.05

virtual

파생 클래스에서 재정의 될 수 있다고 알려주는 키워드

 

 

기본 사용

함수 앞에 virtual 키워드를 통해 사용할 수 있다.

 

 

virtual 없는 경우 

함수 앞에 virtual이 없어도 상위 함수를 호출할 수 있다.

 

 

재정의

하위 클래스에서 함수를 재정의 할 수 있다.

 

 

하위클래스 virtual

하위 클래스에 virtual 키워드를 통해 명시적으로 표현할 수 있다.

 

 

하위클래스 override

override 키워드를 통해 명시적으로

재정의 했다고 알려줄 수 있다.

 

 

virtual과 override

override 키워드를 사용했을 경우에는

virtual 키워드가 필요하다

 

 

정적바인딩

상위클래스 포인터형으로 저장된 하위클래스는

상위클래스 함수 호출

 

 

동적바인딩

상위클래스 포인터형으로 저장된 하위클래스는

가상함수테이블을 통해 하위클래스 함수 호출

 

 

형변환 연산자

정상적으로 형변환 되어 작동한다.

 

 

dynamic_cast

virtual 키워드가 없을 경우 dynamic_cast 불가능

 

 

가상 함수

가상함수 선언시 반드시 재정의 해주어야 한다.

 

재정의 시 정상적으로 작동하게 된다.

'C++' 카테고리의 다른 글

[C++] friend  (0) 2023.05.18
[C++] constexpr  (0) 2023.05.16
[C++] 참조자  (0) 2023.05.15
[C++] const  (0) 2023.05.13
[C++] 복사대입연산자  (0) 2023.05.12

friend

선언대상에게 정보를 공유해 주는 키워드

사용할 경우 캡슐화가 깨질 수 있어 주의해야 한다.

 

 

friend 클래스

위와 같이 클래스 앞에 friend를 붙여주면 된다.

class 키워드를 빼도 동일하게 작동한다.

 

 

접근 허용

friend 클래스에게 나의 protected, private 접근을 허용한다.

 

 

friend 클래스가 아닐 경우

protected, private에 접근할 수 없다.

 

 

순서의 중요성

Apple이라는 클래스가 만들어질 때

Orange라는 클래스의 정보가 없어 문제가 생기게 된다.

 

 

일방적인 friend

friend를 통해 접근권한을 허용했지만

상호적으로 허용되는 것은 아니다.

 

 

상호참조

서로가 서로를 필요로 하게 되어서 생성이 불가능하게 된다.

(닭이 먼저인가, 달걀이 먼저인가)

 

 

전방선언

전방선언과 포인터를 이용해 사용할 수도 있다.

 

 

상속

상위 클래스의 friend의 영향을 받는 클래스는

상위클래스의 protected, private 접근가능하다

 

상속받은 클래스는 상위 friend의 효력이 사라진다

하위 클래스의 protected, private 접근이 불가능하다

 

 

연계

A가 B에게 접근을 허용하고

B가 C에게 접근을 허용해도

C가 A에 접근허용되는 것은 아니다.

 

모두에게 권한을 줘야 작동하게 된다.

 

 

friend 함수

friend 키워드를 통해 함수밖에서

protected, private에 접근이 허용된다.

 

friend 키워드를 지울 경우 접근이 제한된다.

'C++' 카테고리의 다른 글

[C++] virtual  (0) 2023.05.23
[C++] constexpr  (0) 2023.05.16
[C++] 참조자  (0) 2023.05.15
[C++] const  (0) 2023.05.13
[C++] 복사대입연산자  (0) 2023.05.12

constexpr

컴파일시간에 값이 결정된다고 알려주는 키워드

c++14 기준으로 작성되었습니다.

 

 

기본사용

변수명, 함수명 앞에 constexpr키워드를 통해 선언할 수 있다.

constexpr은 const의 성질을 가지고 간다.

 

 

변경불가

한번 선언되면 변경이 불가능하다

 

 

변수

값의 변화가 있는 수는 당연히 사용 할 수 없다.

 

 

상수

컴파일 타임에 정해지기 위해서는 상수여야만 한다.

 

 

함수

컴파일 타임에 정해진다는 보장이 없으므로 불가능하다.

 

constexpr 키워드를 통해 사용 할 수 있다.

 

 

C++14

C++14부터는 지역변수의 선언이 가능하다.

재귀를 호출하지 않고도 계산 할 수 있다.

 

 

런타임

컴파일타임에 사용되지 못할 경우

런타임에 함수가 작동하게 된다.

 

 

멤버변수

멤버변수로서 constexpr은 사용이 불가능하다.

 

 

상속

virtual 키워드와 constexpr은 같이 사용할 수 없다.

 

 

c++20

c++20에서는 virtual과 constexpr을 동시에 사용할 수 있다.

'C++' 카테고리의 다른 글

[C++] virtual  (0) 2023.05.23
[C++] friend  (0) 2023.05.18
[C++] 참조자  (0) 2023.05.15
[C++] const  (0) 2023.05.13
[C++] 복사대입연산자  (0) 2023.05.12

참조자

특정 변수이름 대신 사용할 수 있는 별명

 

 

기본사용

별명처럼 변수를 사용할 수 있기 때문에

변수와 레퍼런스값 모두 같은 값을 출력한다.

 

 

주소값 공유

두 값 모두 같은 주소를 가리키고 있기 때문에

하나를 변경할 경우 둘 다 영향을 받는다.

 

 

초기값 지정

일반적으로 레퍼런스는 저장된 주소를 복사한다.

저장된 주소가 없을 경우 사용이 불가능하다.

 

 

nullptr 불가

nullptr, NULL로 초기화하는 방식도 불가능하다.

 

 

상수 레퍼런스

const 키워드가 없을 경우에는 리터럴 상수로 선언 불가능하다.

 

const 키워드를 통해 리터럴 상수를 사용 할 수 있다.

 

 

레퍼런스를 이용한 치환

참조자를 이용해 값을 서로 교환해 줄 수 있다.

 

 

레퍼런스 반환의 위험성

참조자로 반환값을 받을 경우에 조심해야한다.

위 상황은 스택에서 제거된 주소를 계속 가리키고 있다.

 

 

이동생성자

어떠한 객체를 옮겨야 할 때 복사해서 지울 경우에는 임시객체를 생성한다

객체가 커질수록 많은 부하를 가져오게 돼서 주의해야 한다.

'C++' 카테고리의 다른 글

[C++] friend  (0) 2023.05.18
[C++] constexpr  (0) 2023.05.16
[C++] const  (0) 2023.05.13
[C++] 복사대입연산자  (0) 2023.05.12
[C++] 복사생성자  (0) 2023.05.11

합정역에서 M7731번을 타고 킨텍스에 도착했다.

오후 1시 반쯤 도착했는데 사람이 엄청 많았다.

입장은 1시간 정도 줄 서서 기다렸다가 입장할 수 있었다.

 

 

들어와서 무슨 게임들이 있나 이곳저곳 돌아다녀봤다.

 

코세타

리듬게임이 재밌어 보여서 줄을 서서 대기하면서 플레이를 구경

대기 인원이 많아서 한명당 2판 플레이 가능

 

처음에 아무거나 선택해서 플레이했는데 생각보다 많이 어려웠다~

 

다음에는 조금 쉬운난이도로 바꿔서 플레이

노래들이 박자감이 있고 큰 터치스크린으로 플레이해서 만족

이미 상용화된 게임이라 돌아오면서 몇 번 더 플레이했다~

 

라핀

토끼 캐릭터들이 주인공이었는데 각자만의 특성과 스토리가 있었다

 

 

2D 플랫포머 게임으로 다양한 퍼즐과 스토리가 있어 좋았다

스토리를 중요시하는 플레이어라면 힐링게임이 될 수도 있다

게임의 컨트롤이 어려울 경우 난이도 설정이 가능하다(이지모드)

 

 

중간중간 다른 토끼들이 뛰어 넘어가는 맵이 나오는데

경쟁 아닌 경쟁과 가이드라인을 제시해 주는 느낌이라 신선했다

 

 

환세취호전

어린 시절에 재밌게 했던게임이라 반가운 마음에 플레이

지하던전에서 시작했는데 자꾸 죽어서 최대 HP가 계속 줄어들었다..

중간에 멧돼지들 잡으면서 맹호난무 기술레벨업~

마을로 도망친 다음 해변가가서 스마슈 구하고 병원에다가 데려다줬다

게임의 스토리라인은 크게 비슷한 느낌이고 그래픽이  많이 좋아졌다

실제 출시하게 되면 어떻게 바뀔지 궁금하다

 

 

이상한나라의 Ragnarok

방치형 힐링게임느낌이고 가이드를 따라가면 이것저것 할 수 있다

주목적은 이그드라실이라는 나무를 성장시키는 게임 같다

퀘스트 동선이 너무 정신없어서 뭔가 어렵다는 느낌을 받았다.

 

성장하게 되면 각종 기능들이 해금되며 제한이 풀린다

느긋한 힐링게임을 좋아한다면 플레이해 볼만할 것 같다.

 

마리오카트

게임의 화질은 좋지 않아 눈이 어지러웠지만 재밌게 플레이했다.

생각보다 AI들이 너무 잘해서 이기기 어려웠다~

 

Remove : 범죄는 흔적을 남긴다

주어진 시간 동안 범죄의 흔적을 지워야 하는 게임

방탈출과 비슷하면서 조금 차별된 느낌이 들었다

핸드폰을 통해 시간 및 각종 상호작용이 가능

특히 사운드와 함께 플레이하면 몰입감이 올라간다

적당한 공포감과 추리를 좋아한다면 추천할만한 게임

 

후기

여러 게임을 체험해 볼 수 있어서 너무 좋았다

시간이 타이트해서 많이 즐기지 못해 아쉽다~

 

 

const

상수로 선언하여 수정하지 못하도록 하는 키워드

 

 

일반변수 const 선언

 

 

일반변수 const 변경

변경을 시도할 경우 컴파일 에러가 나게 된다.

 

 

포인터 const (변수명 앞)

변수명이 가리키는 변수의 값은 변경이 가능하다.

 

포인터자료형 변수명 앞에 const가 붙은 경우

변수명이 가리키는 주소변경이 불가능하다.

 

 

포인터 const (자료형 포인터 앞)

포인터가 가리키는 변수의 주소는 변경이 가능하다.

 

포인터가 가리키고 있는 값의 변경은 불가능하다.

 

pA를 통한 값 변경은 불가능했지만 iA를 통해 변경할 수 있다.

 

 

const 멤버 변수 

초기화리스트를 통해 값을 초기화할 수 있다.

 

대입해서 초기화 할경우 컴파일 에러가 나게 된다.

 

 

const 함수 

함수명 뒤에 const를 붙이면 멤버변수의 변경이 금지된다.

 

지역변수의 변경은 허용된다.

 

 

const 객체

정상적으로 값이 바뀌고 실행된다.

 

const가 붙은 객체는 멤버변수의 값을 변경시킬 수 없다.

 

getHealth()의 const 키워드를 제거하면 컴파일 에러가 난다. 

const 객체는 const가 붙은 함수만 호출할 수 있다.

 

 

const 오버로딩

const가 붙지 않은 객체는 const가 붙지 않은 함수를 호출하고

const가 붙은 객체는 const가 붙은 함수를 호출한다

 

const가 붙지 않은 객체도 const가 붙은 함수를 호출 할 수 있다.

 

const가 붙은 객체는 const가 붙지 않는 함수를 호출 할 수 없다.

 

 

mutable

mutable 키워드가 붙은 변수는 const가 붙은 함수 내에서도 변경이 가능하다.

'C++' 카테고리의 다른 글

[C++] constexpr  (0) 2023.05.16
[C++] 참조자  (0) 2023.05.15
[C++] 복사대입연산자  (0) 2023.05.12
[C++] 복사생성자  (0) 2023.05.11
[C++] 소멸자  (1) 2023.05.10

+ Recent posts