251023

lililllilillll·2025년 10월 23일

개발 일지

목록 보기
333/350

✅ 한 것들


  • Project MVG
  • 백준


🎮 Project MVG


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

멀티 플레이어 솔루션 계층

  • 게임플레이 계층 : Unity
  • 넷코드 계층 : 멀티 필요한 데이터 확보, Netcode for GameObject
  • 전송 계층 : 데이터 보냄, Unity Transport

Multiplayer playmode로 다수 클라 테스트 가능

Multiplayer Widgets로 방 생성 및 방 접속 테스트 가능

  • 게임 오브젝트 생성 메뉴 > Multiplayer Widgets에 Session, Session List 등 메뉴 프리셋 존재



⚔️ 백준


1039 교환

namespace
{
	int n, k;
	vector<int> nums;

	void swap(int idx1, int idx2)
	{
		int temp = nums[idx1];
		nums[idx1] = nums[idx2];
		nums[idx2] = temp;
	}

	// 숫자를 크기 순대로 정렬해야 한다
	// 뒤에서부터 순회하며, 역시 역순으로 이중 순회
	// 자기보다 작은 놈이 있는 최저 인덱스를 확인
	// 최저 인덱스가 역대 최저 인덱스보다 낮으면 갱신
	
	// 이미 정렬돼있다면,
	//   같은 숫자가 있다면 그대로 둔다
	// 	 같은 숫자가 없다면 맨 마지막 두 인덱스 교환
	// 숫자가 1자리수거나 교환 후 앞자리가 0이라면 return -1

	void SwapToMaxVal()
	{
		if (nums.size() == 1) { nums = { -1 }; return; }

		int toIdx = nums.size();
		int fromIdx = -1;

		for (int i = nums.size()-1; 0 <= i; i--) // 오른쪽
		{
			for (int j = i - 1; 0 <= j; j--) // 왼쪽
			{
				if (j <= toIdx && nums[j] < nums[i])
				{
					if (fromIdx != -1 && i != fromIdx && nums[i] < nums[fromIdx]) continue;
					toIdx = j;
					fromIdx = i;
				}
			}
		}

		if (fromIdx != -1)
		{
			swap(fromIdx, toIdx);
			if(nums[0] == 0) { nums = { -1 }; return; }
		}
		// 이미 정렬돼있다면
		else
		{
			int pre = -1;
			for (int num : nums)
			{
				if (pre == num) return;
				pre = num;
			}

			swap(nums.size() - 1, nums.size() - 2);
			if (nums[0] == 0) { nums = { -1 }; return; }
		}
	}
}

void B1039::Solution()
{
	
	cin >> n >> k;
	// 낮은 자리수의 인덱스가 더 낮은 숫자
	while (n > 0)
	{
		nums.push_back(n%10);
		n /= 10;
	}

	if (nums.size() == 1) cout << -1;
	else
	{
		reverse(nums.begin(), nums.end());

		for (int i = 0; i < k; i++)
		{
			SwapToMaxVal();
		}

		for (int num : nums)
			cout << num;
	}
}

고치고 또 고쳐서 18%까진 맞았는데, 그 이상으론 그리디론 도저히 안되겠다.

정석 풀이는 bfs였다. vector를 하나의 노드로 보고, swap하는 걸 엣지로 보는 관점.

profile
너 정말 **핵심**을 찔렀어

0개의 댓글