๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Problem solving/Programmers

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฌธ์ œ ํ’€์ด : ์ˆซ์ž์˜ ํ‘œํ˜„ (C++)

by DONXUX 2023. 6. 16.

https://school.programmers.co.kr/learn/courses/30/lessons/12924

๐Ÿ—’๏ธ ๋ฌธ์ œ 

๋ ˆ๋ฒจ : 2

Finn์€ ์š”์ฆ˜ ์ˆ˜ํ•™๊ณต๋ถ€์— ๋น ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜ํ•™ ๊ณต๋ถ€๋ฅผ ํ•˜๋˜ Finn์€ ์ž์—ฐ์ˆ˜ n์„ ์—ฐ์†ํ•œ ์ž์—ฐ์ˆ˜๋“ค๋กœ ํ‘œํ˜„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์—ฌ๋Ÿฌ๊ฐœ๋ผ๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด 15๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด 4๊ฐ€์ง€๋กœ ํ‘œํ˜„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • 1 + 2 + 3 + 4 + 5 = 15
  • 4 + 5 + 6 = 15
  • 7 + 8 = 15
  • 15 = 15

์ž์—ฐ์ˆ˜ n์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ์—ฐ์†๋œ ์ž์—ฐ์ˆ˜๋“ค๋กœ n์„ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ returnํ•˜๋Š” solution๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.
 
์ œํ•œ์‚ฌํ•ญ

  • n์€ 10,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜ ์ž…๋‹ˆ๋‹ค.

โœ๏ธ ํ’€์ด

์—ฐ์†๋œ ์ž์—ฐ์ˆ˜๋“ค์˜ ํ•ฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ๋ฐ˜ํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. n์€ ์ž„์˜์˜ x๋ถ€ํ„ฐ x + m๊นŒ์ง€ 1 ์ฆ๊ฐ€ํ•˜๋Š” ์—ฐ์†๋œ ์ˆ˜์˜ ํ•ฉ์„ ์˜๋ฏธํ•˜์ฃ .

์ฆ‰, ์ด ๋ฌธ์ œ๋Š” ์œ„ ์‹์—์„œ n์ด ๋˜๋Š”, x๊ฐ€ 0์ด ์•„๋‹Œ, ์–‘์˜ ์ •์ˆ˜ (x, m)์Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋กœ ์น˜ํ™˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • m์€ 0์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. m = 0์ธ ์ƒํ™ฉ์€ ์—ฐ์†๋œ ํ‘œํ˜„์ด ์ž๊ธฐ์ž์‹ ์ผ ๋•Œ ์ž…๋‹ˆ๋‹ค. (์˜ˆ : 15 = 15)
  • x๋Š” 0์ด ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. n์€ ์—ฐ์†๋œ ์ž์—ฐ์ˆ˜๋“ค์˜ ํ•ฉ์ด์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋‘ ๊ฐ€์ง€ ์ „๋žต ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • x์— 1๋ถ€ํ„ฐ ๊ฐ’์„ ๋Œ€์ž…ํ•ด๋ณด๋ฉด์„œ m์ด ์–‘์˜ ์ •์ˆ˜์ธ์ง€ ๊ฒ€์‚ฌํ•˜๊ธฐ
  • m์— 0๋ถ€ํ„ฐ ๊ฐ’์„ ๋Œ€์ž…ํ•ด๋ณด๋ฉด์„œ x๊ฐ€ ์ž์—ฐ์ˆ˜์ธ์ง€ ๊ฒ€์‚ฌํ•˜๊ธฐ

์ €๋Š” m์— ๊ฐ’์„ ๋Œ€์ž…ํ•ด๋ณด๋ฉด์„œ x๊ฐ€ ์ž์—ฐ์ˆ˜์ธ์ง€ ๊ฒ€์‚ฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์„œ ๋ฐ”๋กœ 2์ค‘ for๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ’€ ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, ์‹์„ ๋ณด์•„ํ•˜๋‹ˆ ์ตœ์ ํ™” ํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด ์žˆ์Šต๋‹ˆ๋‹ค.
 
์šฐ์„  ์œ„์˜ ์‹์„ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€ํ˜•ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ (1 + 2 + 3 + ... + m) ๋ถ€๋ถ„์„ ๋“ฑ์ฐจ์ˆ˜์—ด ํ•ฉ ๊ณต์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  x์— ๋Œ€ํ•œ ์‹์œผ๋กœ ๋ฐ”๊ฟ”๋ด…์‹œ๋‹ค.

์ตœ์ข…์ ์œผ๋กœ O(n)์œผ๋กœ ์ด ์‹์„ ์ด์šฉํ•ด์„œ ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ n๊ณผ ํ•จ๊ป˜, m์„ 0๋ถ€ํ„ฐ n๊นŒ์ง€ ๋Œ€์ž…ํ•ด๋ณด๋ฉด์„œ x๊ฐ€ ์ž์—ฐ์ˆ˜๊ฐ€ ๋˜๋ฉด ์นด์šดํŒ…ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค!๐Ÿคฃ
 
์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

#include <string>
#include <vector>

using namespace std;

int solution(int n) {
    int answer = 0;
    
    for (double m = 0; m <= n; ++m) {
        double x = (((double)n * 2) - (m * (m + 1))) / (2 * (m + 1)); 
        if (x > 0 && x - (int) x == 0) answer++; // x๋Š” ์ž์—ฐ์ˆ˜์ธ๊ฐ€?
        else if (x < 1) break;	// x๊ฐ€ 1 ๋ฏธ๋งŒ์ด ๋˜๋ฉด ์ง„ํ–‰ํ•  ํ•„์š”์—†์Œ
    }
    
    return answer;
}