반응형

출처: https://www.acmicpc.net/problem/21608

 

21608번: 상어 초등학교

상어 초등학교에는 교실이 하나 있고, 교실은 N×N 크기의 격자로 나타낼 수 있다. 학교에 다니는 학생의 수는 N2명이다. 오늘은 모든 학생의 자리를 정하는 날이다. 학생은 1번부터 N2번까지 번호

www.acmicpc.net

 

 

구현문제입니다.

 

 

 

1. 단순구현으로 해결했다.

결론적으로 반복문을 통해서 각각의 학생들의 자리를 픽스시켜 주면 되기 때문에, 천천히 조건에 맞게 구현하면 된다.

 

2. 3가지 조건중 1번, 2번을 통해서 각각의 학생별로 해당하는 위치를 도출했다. 3번은 우선순위에 의해서 일반적인 반복문을 사용하면 자동으로 결정됨.

  1. 비어있는 칸 중에서 좋아하는 학생이 인접한 칸에 가장 많은 칸으로 자리를 정한다.
  2. 1을 만족하는 칸이 여러 개이면, 인접한 칸 중에서 비어있는 칸이 가장 많은 칸으로 자리를 정한다.
  3. 2를 만족하는 칸도 여러 개인 경우에는 행의 번호가 가장 작은 칸으로, 그러한 칸도 여러 개이면 열의 번호가 가장 작은 칸으로 자리를 정한다.

그런데 왠 런타임 에러??

 

주의점은 만약 좋아하는 친구와, 빈칸 모두 없는 상황일때는 3번 조건에 의해서 가장 가까운 칸을 선택하도록 예외처리를 추가해주어야 한다. (본 코드 storePosition 함수 아래쪽 참고)

 

 

 

정답 코드

#include <iostream>
#include <vector>
using namespace std;

vector <int> friends[401];
vector <int> vec; // 순서저장
int arr[25][25] = { 0, }; // 위치가 픽스 되면
int n = 0;
int result = 0;

int y_ar[4] = { 0,0,1,-1 };
int x_ar[4] = { 1,-1,0,0 };

void storePosition(int& y, int& x, int v) {


	int rf = 0;
	int rb = 0;
	int ry = 0;
	int rx = 0;

	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			if (arr[i][j] != 0)
				continue;

			int cy = i;
			int cx = j;
			int fav = 0;
			int bla = 0;


			for (int k = 0; k < 4; k++) {
				int ny = cy + y_ar[k];
				int nx = cx + x_ar[k];

				if (ny < 1 || ny > n || nx < 1 || nx > n)
					continue;

				for (int u = 0; u < 4; u++) {
					if (arr[ny][nx] == friends[v][u])
						fav++;
					else if(arr[ny][nx] == 0)
						bla++;
				}
			}

			if (fav > rf) {
				rf = fav;
				rb = bla;
				ry = cy;
				rx = cx;
			}
			else if (fav == rf) {
				if (bla > rb) {
					rb = bla;
					ry = cy;
					rx = cx;
				}
			}

		}
	}



	if (ry == 0 && rx == 0) { // 중요
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= n; j++) {
				if (arr[i][j] == 0) {
					ry = i, rx = j;
					break;
				}
			}
			if (ry != 0 && rx != 0)
				break;
		}

	}

	y = ry, x = rx;

}

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);

	cin >> n;

	for (int i = 0; i < n*n; i++) {
		int temp;
		int temp2[4];

		cin >> temp;
		vec.push_back(temp);

		for (int j = 0; j < 4; j++) {
			cin >> temp2[j];
			friends[temp].push_back(temp2[j]);
		}
	}


	for (int i = 0; i < n*n; i++) {
		int v = vec[i];
		int y = 0; int x = 0;
		storePosition(y, x, v);
		arr[y][x] = v;



	}


	// 점수 계산 

	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {

			int cy = i;
			int cx = j;
			int cnt = 0;

			for (int k = 0; k < 4; k++) {
				int ny = cy + y_ar[k];
				int nx = cx + x_ar[k];

				if (ny < 1 || ny > n || nx < 1 || nx > n)
					continue;

				for (int u = 0; u < 4; u++) {
					if (arr[ny][nx] == friends[arr[cy][cx]][u])
						cnt++;
				}

			}

			if (cnt == 1)
				result += 1;
			else if (cnt == 2)
				result += 10;
			else if (cnt == 3)
				result += 100;
			else if (cnt == 4)
				result += 1000;
		}
	}

	cout << result << endl;


	return 0;
}

 

 

반응형
반응형

해당 포스팅에서는 Visual Studio에서 qt를 사용하기 위해서 해야하는 작업들에 대해서 정리하려고 한다.

 

 

워낙 그림으로 친절하게 설명해주는 포스팅이 많으니 나는 간단하게 짚어야 하는 항목만 소개하려고 한다.

 

1. VS, QT 설치

 

당연하게 Visual Studio랑 qt가 필요하다.

 

QT 설치 링크

download.qt.io/archive/qt/

 

Index of /archive/qt

 

download.qt.io

간단한 회원가입후에 다운받을 수 있다. 필수적인 것은 msvc와  Debuging tools, Developer and Designer Tools 정도

 

Visual Studio 설치

https://visualstudio.microsoft.com/ko/vs/whatsnew/

 

Visual Studio 2019의 새로운 기능 | 무료 다운로드 - Visual Studio

Visual Studio 2019는 라이브 공유, AI 지원 코드 완성 등 다양한 기능을 통해 실시간으로 협업할 수 있는 최신 기능을 제공합니다. 무료로 다운로드하세요.

visualstudio.microsoft.com

쉬우니 알아서 설치하자 

추후에도 추가적으로 필요한 기능들을 추가할 수 있으니 설치

 

 

 

 

2. Visual Stduio에서 Qt VS add-in 설치

VS에서 도구-확장및업데이트-온라인으로 설정하고 검색해서 Qt Visal stdio Tools를 설치

 

 

 

3. Path 설정하기 

 

Qt Visal stdio Tools을 설치하고 다시 VS를 켜보게 되면 상단에 Qt Visal stdio Tools 항목이 추가된 것을 확인할 수 있다.

Qt option 클릭 - version 으로 들어가서 default 값이 잘 저장되어있는지 확인해야 한다.

 

대충 C:\Qt\Qt5.14.0\5.14.0\msvc2017\bin 이런 경로에 QMAKE를 경로로 지정해주어야 한다.

원하는 버전으로 Default 체크해주고 넘어가자 



마지막으로 시스템 변수에 3개를 추가해주어야 한다.

 

 

시스템 환경 변수 설정 - 환경 변수 편집에서 

3개 가지를 추가한다.

 

Path 편집 : C:\Qt\Qt5.14.2\5.14.2\msvc2013_64\bin 

QTDIR 추가 : C:\Qt\Qt5.14.2\5.14.2\msvc2013_64

Qt_LIBS 추가 : C:\Qt\Qt5.14.2\5.14.2\msvc2013_64\lib

 

이때, 만약에 내 경로랑 해당 경로가 다르다면, 가장 끝 경로만 맞춰주면 된다.

ex) Qt_LIBS - C:\Qt\5.14.2\msvc2013_64\lib


여기까지 진행하면 자동으로 VS에서 Path값을 적용시켜서 정보를 찾아오게 된다.

 

 

주의할 점은 함부로 Qt Visal stdio Tools의 버전 외 다른 값을 바꾸지 말자

특히 MSbuild 값을 바꿔 버리면, 재설치해도 그 값이 그대로 유지되고 meta 데이터가 적용되지 않아서 

참 고생한다.

 

 

 

 

반응형
반응형

프로그램 빌드를 진행하면서 WSL2를 사용하여 Window 환경에서 Ubuntu 환경의 GUI 프로그램을 실행시켜야 하는 상황이었다.

 

다양한 원격 접속을 지원하는 MobaXterm을 사용하였고, x-server 기능을 사용해서 GUI를 실행시키려고 했다.

 

너무나 이상하게 별다른 에러 메시지가 뜨지 않고, 정상적으로 실행이 되는데, GUI 화면은 뜨지 않는 이상한 에러에 직면했다.

여러가지 삽질을 진행하면서 깨달은 점은 wsl1으로는 정상적으로 실행되지만 wsl2에서 에러가 난다는 것이다. 

 

 

무슨 차이가 있길래 동작이 다른지 어떻게 해결해야 하는지 고민하고 있다.

 

차이가 나는 이유는 아래 설명과 같다.

https://thenoface.tistory.com/5

 

WSL2에서 Ubuntu GUI 프로그램 실행하기 (VcXsrv)

WSL2가 Hyper-V를 이용한 VM 방식으로 바뀌면서 기존에 WSL1에서 사용하던 방식으로는 우분투의 GUI 프로그램을 실행할 수 없게 됐다. WSL1은 호스트와 이더넷을 공유했기에 WSL1와 (로컬호스트인) 127.0.0

thenoface.tistory.com

 

 

WSL2 는 이더넷이 분리되어 동적으로 IP가 할당되기 때문에 환경 변수에서 IP를 명시해주어야 하는 것 같다. 

export DISPLAY=172.0.10.1:0 # display set ip

 

 

---- 해결 방법  ----

본인의 xserver display에 ip주소를 기입하여 넣어주어야 한다.

MobaXterm에서는 display 화면 상단에 ip값이 적혀있다.

리눅스나 본인 윈도우의 ip값을 입력해주는게 아니라 display set에 적힌 ip값이어야 한다.

 

 

 

추가적으로 파라미터로 -ac 를 추가해야 한다고 한다.

근데 이 부분을 잘 모르겠다..... MobaXterm에서의 파라미터 추가를 어떻게 할까...

일기처럼 쓰는 미완성 포스팅이기 때문에 문제를 해결하고 다시 수정하려고 한다...

찝찝하다..ㅁㄴㅇㅁㄴㅇㅁㄴㅇㅁ나ㅣ;ㅇㅁ나ㅣ;ㅇㅁ낭;ㅁㄴ암넝;카ㅣ첰;탘탗ㅋㅌ;ㅏㅁ넝;ㅏ먼ㅇ;ㅏㅁㄴㅇ

 

 

 

 

영어 잘하시면 읽는 것을 추천드리는 해결방안..

 

https://github.com/microsoft/WSL/issues/4106

 

Can't use X-Server in WSL 2 · Issue #4106 · microsoft/WSL

Your Windows build number: (Type ver at a Windows Command Prompt) Microsoft Windows [Version 10.0.18917.1000] with Ubuntu 18.04, WSL 2. VcXsrv X Server Version 1.20.1.4 What you're doing and wh...

github.com

 

 

 

 

 

반응형
반응형

1.  깃헙

https://github.com/

 

GitHub: Where the world builds software

GitHub is where over 65 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and feat...

github.com

 

컴공과 학생들의 인스타그램이에요!

개발한 프로그램들을 올리면 다른 친구들, 사람들이 볼 수 있고

인스타처럼 좋아요를 눌러준답니다. ㅎㅎㅋㅋㅋ

 

협업할 때 용이해서 회사에서도 많이 사용해요. 

대학교 2학년때 부터는 필수적으로 사용하게 될겁니다.

 

2. 백준 

https://www.acmicpc.net/

 

Baekjoon Online Judge

Baekjoon Online Judge 프로그래밍 문제를 풀고 온라인으로 채점받을 수 있는 곳입니다.

www.acmicpc.net

 

컴공과 학생들이 알고리즘을 배울 수 있는 도토리 사냥터예요.

취업하는데 가장 중요한게 알고리즘 문제풀이인데, 

해당 사이트에서 다양한 알고리즘 문제풀이를 공부합니다.

 

약간 수학 문제 풀이랑도 비슷해요! (TMI 백준은 사람이름이에요. 엄준식같은 느낌)

 

3.  스택오버플로우

https://stackoverflow.com/

 

Stack Overflow - Where Developers Learn, Share, & Build Careers

Stack Overflow | The World’s Largest Online Community for Developers

stackoverflow.com

 

여기는 개발자들의 네이버 지식인이에요. 

개발하다 보면 모르는거 투성이일텐데 자료를 찾다보면 

결국 다 여기로 모이게 되요. ㅋㅋㅋㅋ

 

 

컴퓨터공학에 대한 이해가 없는 일반인이 기준으로 생각하고 글을 쓰다 보니 조금 다른 내용들도 있을 거라고 생각합니다.

이해부탁드립니다.

 

반응형
반응형

 

 

8월부터 2개월간의 긴 채용 전형끝에 최종 합격을 했습니다. 

이번 포스팅에서는 채용기간동안 신경썼던 부분이나 알면 좋을 부분들에 대해서 이야기 해보려고 합니다. 

 

면접 질문, 코딩테스트 문제 혹은 유형과 같이 직접적인 부분에 대해서 언급하지 않을 것이고 댓글이나 쪽지도 받지 않을 생각입니다. 이점 양해 부탁드립니다. 

 

 

우선 전형은 서류 - 코딩테스트 - 1차 직무 면접 - 2차 임원 면접으로 구성되는 무난한 방식입니다.

 

전형별로 나누어서 설명하겠습니다. 

 

 

 

서류전형


서류 전형에서 가장 중요하게 생각했던 것은 제가 지원한 직무에 대한 어필이었습니다.  실제로 서류를 현업에서 일하시는 분들이 검토하신다는 이야기를 들었기 때문에 지원 직무에 대한 프로젝트 경험, 알고 있는 기술들을 글에 많이 풀어내려고 노력했습니다. 

 

1. 현대오토에버의 해당 직무에 지원한 이유와 앞으로 현대오토에버에서 키워 나갈 커리어 계획을 작성해주시기 바랍니다.

 

1번 문항은 직무에 대한 관심에 대해서 초점을 맞추어 어필하려고 노력했습니다. 

커리어 계획과 관련한 부분은 사실 대부분의 사람들이 모두 비슷할 수 밖에 없기 때문입니다. 

 

1000자중에서 지원이유에 대해서 600자 커리어 계획에 대해서 400자 정도 작성을 하였습니다.

 

 

 

2. 지원 직무와 관련하여 어떠한 역량을(지식/기술 등) 강점으로 가지고 있는지 그 역량을 갖추기 위해 무슨 노력과 경험을 했는지 구체적으로 작성해주시 기 바랍니다. (학내외 활동/프로젝트/교육 이수 과정 등 본인의 경험을 기반으로 작성해주시기 바랍니다.)

 

사실상 1번 문항보다 훨씬 집중적으로 작성했던 문항입니다. 1500자가 생각보다 많아서 고생했던 기억이 있습니다. 

저는 학부생때 임베디드 연구실에서 활동했었고, 관련 논문, 인턴경험이 있었습니다. 이러한 과정을 통해서 해당 직무에서 사용하는 000을 사용해보았고, 역량을 넓힐 수 있었다. 이런식으로 작성을 했습니다. 

 

하나의 프로젝트 경험으로는 절대 1500자를 채울 수 없기 때문에 크게는 2개의 소제목을 가지고 글을 작성하였고, 첫 번째 글에서는 지원 직무와 관련한 기술에 대한 어필, 두 번째에서는 SW개발 능력에 대한 어필을 했습니다. 

 

2번 문항이 가장 중요하다고 생각합니다.

 

결국 이후에 진행되는 면접전형에서 자소서 기반으로 질문들이 들어오기 때문에 어떻게 보면 가장 중요한 전형이라고 생각합니다.

 

 

 

 

 

코딩테스트 전형


"3문제다, 4문제다, sqld가 포함되어 있다" 정말 여러가지 이야기 많은데 결론만 말씀드리면 전부 맞는 말입니다.

 

사실 현대오토에버는 직무, 부서마다 코딩테스트문제, 개수가 다르기 때문입니다. 어떤 분들은 sql이 포함된 문제를 푸시고 저같은 경우에는 알고리즘 문제로만 3문제가 출제가 되었습니다. 

 

문제의 난이도는 일반적인 코딩테스트와 비슷한 수준이라고 생각하고 제 기준에서는 "" 이라고 생각합니다. 

어떠한 유형의 문제가 나올지 모르니 최대한 다양한 알고리즘 유형을 학습하시고 테스트에 임하면 좋을 것이라고 생각합니다. 

 

풀었던 알고리즘 문제에 대한 언급은 하지 않아 주셨으면 합니다. 사실 같은 문제가 나올리도 없고, 유형만 말씀드리더라도 공정하지 못하다고 생각하기 때문입니다. 

 

다른 코테들과 동일하게 프로그래머스를 통해서 진행하며 사용가능한 언어들도 동일했던 걸로 기억하고 있습니다. 

혹시 sqld를 준비하시는 분들이라면 프로그래머스에서 제공하는 고득점 sql을 풀어보면 도움이 될 것이라고 생각합니다.

 

 

https://programmers.co.kr/learn/challenges?tab=sql_practice_kit 

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

 

 

 

면접 전형


힘들게 두 전형을 통과하면 최종적으로 2번의 면접이 진행이 됩니다.

 

현업 개발자 분들이 진행하시는 1차 직무면접, 임원분들이 참여하는 2차 임원면접입니다. 

 

 

우선 1차 면접에서는 팀장님과 그 밑에서 일을 하시는 현업 개발자 2분이 함께 참여하셨습니다. (일대다 면접)

조심스럽게 대해주셨고 편안한 분위기로 면접이 진행됐습니다.

 

기본적인 면접 질문들이후에 직무 역량을 파악하시는데 집중하셨습니다. job description에 필요 역량과 관련한 부분 위주로 어필을 했습니다. 저는 github주소도 제출을 하였는데, 면접관중 한분께서 프로젝트의 코드를 보시면서 왜 이런식으로 제작을 했는지 묻기도 하셔서 이때는 꽤 당황했던 기억이 있습니다.  

 

그리고 오래 회사를 다닐 친구인지도 어느정도 파악하려고 하시는게 느껴졌습니다. 

 

 

 

2차 면접은 임원면접이었습니다. 임원급의 면접관님과 인사실장님이 참여를 하셨습니다. 

1차와는 다르게 다대다 면접을 진행했습니다. 확실히 다른 면접 지원자들과 함께 진행할 때가 더 떨리는 것 같습니다.

 

기본적인 면접 질문들 위주였고, 역량과 관련한 질문들도 받았습니다.

1차와 가장 큰 차이점은 자소서 기반의 역량 질문외에도 일반적인 인성질문도 함께 포함되어 있었다는 점인 것 같습니다.

 

임원면접은 1차 면접보다는 다소 무거운 분위기에서 진행되었습니다. 지금 생각해보면 다른 지원자들도 함께 떨고 있어서 그랬던 것 같습니다. 

 

이러한 과정을 거쳐서 최종적으로 회사에 합격을 할 수 있었습니다. 

 

2년동안 취업준비를 하면서 정신적으로 많이 지쳐있던 것 같은데, 좋은 결과를 얻을 수 있어서 정말 다행이라고 생각합니다. 다음 포스팅에서는 취업 준비를 하면서 느꼈던 감정이나 생각들을 끄적거리려고 합니다. 

심심하면 놀러오세요~,~

 

 

  

 

 

반응형
반응형

인적성검사 - 코딩테스트 - 1day 면접 순서로 진행합니다!

 

 

인적성검사


 

인적성검사는 비교적 간단하고 기본적인 유형들로 문제가 구성되어 있습니다. 온라인으로 진행했습니다. 

 

풀기전에 문제를 풀어보면 좋겠지만, sw직무 분들이 인적성까지 준비하기에는 어려움이 많죠.. ㅠㅠ

저도 이전에 문제를 안 풀어보고 시험을 보았습니다.

그런데도 붙었더라구요! 굉장히 쉬운편이라고 느꼈습니다.

 

팁은 문제가 여러개인데 유형이 중복되어서 나오더라구요. 그래서 문제를 푸시면서도 쉽게 포기하기보다는 끝까지

어떤 유형에 문제인지 파악하면 좋을거 같습니다.

 

아래 링크에서 수리와 관련한 유형들은 미리 학습하시면 좋을 것 같습니다.

https://www.youtube.com/watch?v=VMMoPE9wpIU 

 

 

 

 

코딩테스트


인적성과 함께 코딩테스트도 진행했습니다. 총 3개문제이고 2개는 알고리즘 문제, 1개는 sql 문제입니다.

비교적 쉬운 난이도이고 1시간동안 풀어야 했기 때문에 빠르게 푸는게 관건인 문제들 이었습니다.

문제 유형이나 내용은 비밀....

 

 

 

 

 

 

1day 면접


 

1 day 면접이라고 하루만에 직무 면접과 임원 면접을 함께 진행했습니다. 

직무면접에서는 기존에 과제로 제출한 ppt를 5분동안 발표하고 질의응답을 함께 진행했습니다.

그리고는 자소서 기반의 전형적인 직무 면접이었습니다.

 

임원면접에서는 다대다로 진행되었고 기본적인 공통 질문을 통해서 회사에 인재상에 부합하는지 역량을 가지고 있는지 를 평가했습니다. 

 

굉장히 일정이 빠르게 진행되어서 정신없이 준비했던것 같습니다. 

 

 

 

반응형
반응형

문제링크: https://www.acmicpc.net/problem/12886

 

12886번: 돌 그룹

오늘 강호는 돌을 이용해 재미있는 게임을 하려고 한다. 먼저, 돌은 세 개의 그룹으로 나누어져 있으며 각각의 그룹에는 돌이 A, B, C개가 있다. 강호는 모든 그룹에 있는 돌의 개수를 같게 만들려

www.acmicpc.net

체감 골3 이상이었던 bfs 문제 ㅠㅠ

 

 

접근방식

 

1. dp방식, bfs방식 등이 가능할 것 같았다. 

 

2. 만만한 bfs로 도전

 

만약 a, b, c의 총합이 3으로 딱 나눠떨어지지 않는다면 무조건 결과는 0이다. 

 

1000x1000x1000 배열을 생성하게 되면 메모리 초과이다. 

이때, 총합의 합이 같기 때문에 1000x1000만으로도 a,b,c의 값을 저장할 수 있다는 것을 파악해야 한다.

 

큐에 들어가는 값은 정렬을 하여서 사용한다.

그 이유는 중복을 방지하기 위함과 런타임에러(OutOfBounds)를 방지하기 위함

 

 

 

문제풀이 

 

1.  큐를 사용한 bfs 구현

 

2. y_ar과 x_ar를 통해서 현재 값을 기준으로 탐색해야 하는 값들을 도출

 

 

 

정답코드

#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;

int visited[1001][1001] = { 0, };
int a, b, c, d = 0;

int bfs() {

	queue <pair<int, int>> que;
	que.push(make_pair(a, b));
	visited[a][b] = 1;

	while (!que.empty()) {
		int ca = que.front().first;
		int cb = que.front().second;
		int cc = d - ca - cb;
		que.pop();

		if (ca == cb && ca == cc)
			return 1;

		int n_x[3] = { ca,ca,cb };
		int n_y[3] = { cb,cc,cc };

		for (int i = 0; i < 3; i++) {
			int na = n_x[i];
			int nb = n_y[i];
			if (na < nb)
				nb -= na, na += na;
			else if (na > nb)
				na -= nb, nb += nb;
			else
				continue;
			int nc = d - na - nb;

		
			int ra = min(min(na, nb), nc);
			int rb = max(max(na, nb), nc);

			if (visited[ra][rb] == 0) {
				visited[ra][rb] = 1;
				que.push(make_pair(ra, rb));
			}

		}


	}

	return 0;

}

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);

	cin >> a >> b >> c;
	d = a + b + c;

	if ((a + b + c) % 3 != 0)
		cout << 0 << endl;
	else
		cout << bfs() << endl;
	

	return 0;
}
반응형
반응형

문제링크: https://www.acmicpc.net/problem/11286

 

11286번: 절댓값 힙

첫째 줄에 연산의 개수 N(1≤N≤100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 0이 아니라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0

www.acmicpc.net

우선순위 큐를 사용하여서 해결하는 문제

 

접근방식

 

1.  절댓값에 대한 순서를 우선순위 큐를 활용하여 해결하자!

 

문제풀이 

 

1.  pair형태의 우선순위 큐 생성

 

2. min-heap형태로 구성!

근데, "절댓값이 가장 작은 값이 여러개일 때는, 가장 작은 수를 출력" 하라는 조건이 있으니 두번째 원소값을 변형 하여서 구현하기

 

 

 

정답코드

#include <iostream>
#include <queue>
#include <cmath>
using namespace std;

priority_queue <pair<int, int>> que;
int n = 0;
int num = 0;

int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);

	cin >> n;
	while (n--) {
		cin >> num;
		if (num == 0) {
			if (que.size() == 0)
				cout << 0 << "\n";
			else {
				cout <<  que.top().first * que.top().second  << "\n";
				que.pop();
			}
		}
		else {
			if(num > 0)
				que.push(make_pair(-1 * abs(num),-1));
			else
				que.push(make_pair(-1 * abs(num), 1));
		}

	}

	return 0;
}
반응형

'알고리즘 > DP' 카테고리의 다른 글

[백준] 15924-욱제는 사과팬이야!!(C++)  (0) 2021.08.21
[백준] 13703-물벼룩의 생존확률(C++)  (0) 2021.08.21
[백준] 2578-로또(C++)  (0) 2021.08.17
[백준] 2186-문자판(C++)  (0) 2021.08.15
[백준] 10942-팰린드롬?(C++)  (0) 2021.07.25

+ Recent posts