๐Ÿ’ญ Problem Solving

[SWEA][C++] 1289. ์›์žฌ์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ณต๊ตฌํ•˜๊ธฐ

0=2. 2024. 10. 16. 17:09

๋ฌธ์ œ

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV19AcoKI9sCFAZN

 

SW Expert Academy

SW ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์—ญ๋Ÿ‰ ๊ฐ•ํ™”์— ๋„์›€์ด ๋˜๋Š” ๋‹ค์–‘ํ•œ ํ•™์Šต ์ปจํ…์ธ ๋ฅผ ํ™•์ธํ•˜์„ธ์š”!

swexpertacademy.com

 

๋ฌธ์ œ ์ดํ•ด

  • ์ดˆ๊ธฐํ™” ์ƒํƒœ(๋ชจ๋“  bit๊ฐ€ 0)์—์„œ ์›๋ž˜ ์ƒํƒœ๋กœ ๋ณต๊ตฌํ•ด์•ผ ํ•œ๋‹ค.
  • ๋ณต๊ตฌํ•  ๋•Œ๋Š” bit ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ณจ๋ผ 0 ๋˜๋Š” 1์„ ๊ฒฐ์ •ํ•˜๊ณ , ํ•ด๋‹น ๊ฐ’์ด ๋ฉ”๋ชจ๋ฆฌ์˜ ๋๊นŒ์ง€ ๋ฎ์–ด์”Œ์›Œ์ง„๋‹ค.
  • ์ดˆ๊ธฐํ™” ์ƒํƒœ์—์„œ ์›๋ž˜ ์ƒํƒœ๋กœ ๋ณต๊ตฌํ•  ๋•Œ ์ตœ์†Œ ์ˆ˜์ • ํšŸ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

  1. ์ž…๋ ฅ: 0011
    0000์—์„œ 3๋ฒˆ์งธ bit๋ฅผ ๊ณจ๋ผ 1๋กœ ์„ค์ •ํ•˜๋ฉด 0011์ด ๋˜๋ฏ€๋กœ, ์ถœ๋ ฅ๊ฐ’์€ 1์ด๋‹ค.
  2. ์ž…๋ ฅ: 100
    000 → 111 → 100๋กœ, ์ถœ๋ ฅ๊ฐ’์€ 2์ด๋‹ค.

 

๋ฌธ์ œ ํ’€์ด

๐Ÿ” ์ ‘๊ทผ

๋ฐ˜๋ณต๋ฌธ์„ ์ด์šฉํ•ด์„œ ์ดˆ๊ธฐํ™” ์ƒํƒœ์™€ ์›๋ž˜ ์ƒํƒœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฒซ ๋ฒˆ์งธ bit๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ๋น„๊ตํ•˜๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ, ์ด ๋ฐฉ๋ฒ•๋Œ€๋กœ๋ฉด ์ดˆ๊ธฐํ™” ์ƒํƒœ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ์›๋ž˜ ์ƒํƒœ์˜ bit ๊ธธ์ด๋งŒํผ 0์„ ํ• ๋‹นํ•ด์•ผํ•œ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ๊ธธ์ด๊ฐ€ 50์ผ ๊ฒฝ์šฐ, 50๋ฒˆ 0์„ ์ถ”๊ฐ€ํ•ด์•ผํ•˜๋Š” ์ผ์ด ๋ฐœ์ƒํ•œ๋‹ค.

์ด ๊ณผ์ •์„ ์ƒ๋žตํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด๋ณด์ž.

 

๐Ÿ”จ ๊ตฌํ˜„

์ดˆ๊ธฐํ™” ์ƒํƒœ์™€ ์›๋ž˜ ์ƒํƒœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์„ ๋– ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

bit๋ฅผ ํ•œ ๋ฒˆ ์ˆ˜์ •ํ•  ๋•Œ๋Š” ํ•ด๋‹น bit๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ˆ˜์ •๋˜๋ฏ€๋กœ,
์ดˆ๊ธฐํ™” ์ƒํƒœ์˜ ํ˜„์žฌ bit๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ž„์‹œ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•ด 0, 1๋กœ ๋ฐ”๊พธ๋ฉด์„œ ์›๋ž˜ ์ƒํƒœ ๋ฉ”๋ชจ๋ฆฌ์™€ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค.

1. ์ž„์‹œ ๋ณ€์ˆ˜(temp)์˜ ์ดˆ๊ธฐ ์ƒํƒœ๋Š” '0'์ด๋‹ค.
2. ์›๋ž˜ ์ƒํƒœ string์„ ์ˆœํšŒํ•˜๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์‹คํ–‰ํ•œ๋‹ค.
    - ์›๋ž˜ ์ƒํƒœ์˜ ํ˜„์žฌ bit๊ฐ€ temp์™€ ๊ฐ™์œผ๋ฉด, ๋‹ค์Œ bit๋กœ ์ด๋™ํ•œ๋‹ค.
    - ๋‹ค๋ฅด๋ฉด, temp๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ (0 → 1, 1 → 0) ๋ณ€๊ฒฝ ํšŸ์ˆ˜๋ฅผ ๋Š˜๋ฆฐ๋‹ค.

 

์ฝ”๋“œ

#include<iostream>

using namespace std;

int main() {
    int T;

    cin >> T;

    for (int test_case = 1; test_case <= T; ++test_case) {
        string origin;
        int ans = 0;
        char temp = '0';

        cin >> origin;

        for (char c: origin) {
            if (c == temp) continue;

            temp = c;
            ans++;
        }

        cout << '#' << test_case << ' ' << ans << '\n';
    }

    return 0;
}