Problem ๐Ÿ’ป

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

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

 

 

๋ฌธ์ œ ์„ค๋ช…

์ •์ˆ˜๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฐฐ์—ด arr์˜ ํ‰๊ท ๊ฐ’์„ returnํ•˜๋Š” ํ•จ์ˆ˜, solution์„ ์™„์„ฑํ•ด๋ณด์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • arr์€ ๊ธธ์ด 1 ์ด์ƒ, 100 ์ดํ•˜์ธ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
  • arr์˜ ์›์†Œ๋Š” -10,000 ์ด์ƒ 10,000 ์ดํ•˜์ธ ์ •์ˆ˜์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

arrreturn
[1,2,3,4] 2.5
[5,5] 5

Approach 1 โŒ - ๋‚˜์˜ ์ดˆ๊ธฐ ์ ‘๊ทผ ๋ฐฉ๋ฒ•

 1. for๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ธ๋‹ค.
  2. ๊บผ๋‚ธ ์š”์†Œ๋“ค์„ ๋ณ€์ˆ˜ sum์— ๋ชจ๋‘ ๋”ํ•ด์ค€๋‹ค. 
     3. sum์— ๋ฐฐ์—ด์˜ ๊ธธ์ด+1์„ ๋‚˜๋ˆ ์ค€๋‹ค.

class Solution {
    public double solution(int[] arr) {
        
        int x = 0;
        int sum = 0;
        for (int i = 0; i < arr.length(); i++) {
            arr[i] = x;
            sum += x;
        } return sum / (arr.length() +1);
    }
}

Approach 2 โญ• - ๋‚˜์˜ ์ฝ”๋“œ์— ๋Œ€ํ•œ ๊ต์ •

 

1. ๋ฐฐ์—ด ๊ธธ์ด ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์˜ค๋ฅ˜

arr.length()๋Š” ์ž˜๋ชป๋œ ์ ‘๊ทผ. 

๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ๋Š” arr.length๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. 

๋ฐฐ์—ด์€ ๋ฉ”์„œ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ์†์„ฑ์œผ๋กœ ๊ธธ์ด๋ฅผ ์ œ๊ณตํ•œ๋‹ค. 

 

<์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ์˜ ์ฐจ์ด>
1. ์†์„ฑ(Property) :
์†์„ฑ์€ ๊ฐ์ฒด์˜ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ•„๋“œ์ด๋‹ค. 
๋‹จ์ˆœํžˆ ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ์„ค์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
- ํŠน์ง• : ๊ด„ํ˜ธ()๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
- ์˜ˆ์‹œ : ๊ฐ์ฒด์˜ ํฌ๊ธฐ, ๊ธธ์ด, ์ด๋ฆ„, ์ƒํƒœ ๋“ฑ๊ณผ ๊ฐ™์ด ๋ฐ์ดํ„ฐ ๊ทธ ์ž์ฒด๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

2. ๋ฉ”์„œ๋“œ(Method) :
๋ฉ”์„œ๋“œ๋Š” ๊ฐ์ฒด์˜ ๋™์ž‘์ด๋‚˜ ํ–‰์œ„๋ฅผ ์ •์˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ํŠน์ • ์ž‘์—…์ด๋‚˜ ๋กœ์ง์„ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
- ํŠน์ง• : ๊ด„ํ˜ธ()๋ฅผ ํ•˜์šฉํ•˜์—ฌ ํ˜ธ์ถœํ•œ๋‹ค. 
- ์˜ˆ์‹œ : ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๊ฑฐ๋‚˜ ๊ณ„์‚ฐํ•˜๋Š” ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. 

 

<๋ฐฐ์—ด์˜ ๊ธธ์ด : ์™œ ์†์„ฑ์ผ๊นŒ?>
์ž๋ฐ”์—์„œ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋Š” length๋ผ๋Š” ์†์„ฑ์„ ํ†ตํ•ด ์ œ๊ณต๋œ๋‹ค.
๋ฐฐ์—ด์€ ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ๊ณ , ๊ทธ ๊ธธ์ด๋Š” ์ƒ์„ฑ์‹œ ์ •ํ•ด์ง€๋ฏ€๋กœ ๋‹จ์ˆœํžˆ ๊ทธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.
์ด๋Š” ๋ฐฐ์—ด์ด ์ด๋ฏธ ๊ฐ์ฒด ๋‚ด๋ถ€์— ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ ์ •๋ณด๋ฅผ ๋…ธ์ถœํ•˜๋Š” ๋™์ž‘์ด๋ฏ€๋กœ ์†์„ฑ์œผ๋กœ ๊ตฌํ˜„๋œ๋‹ค. 
int[] arr = {1,2,3,4};
System.out.println(arr.length); // ๋ฐฐ์—ด์˜ ๊ธธ์ด : 4

 

์™œ ๋ฉ”์„œ๋“œ๊ฐ€ ์•„๋‹๊นŒ? 

๋ฐฐ์—ด์˜ ๊ธธ์ด๋Š” ์—ฐ์‚ฐ์ด ํ•„์š”์—†๋Š” ๋‹จ์ˆœํ•œ ๊ฐ’ ๋ฐ˜ํ™˜์ด๋‹ค.

๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์€ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ์— ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์„ ๋ฐœ์ƒ์‹œํ‚ค๋ฏ€๋กœ, ๋‹จ์ˆœ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์€ ์†์„ฑ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฒŒ ๋” ํšจ์œจ์ ์ด๋‹ค.

 

<์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ธฐ์ค€์„ ๋” ์•Œ์•„๋ณผ๊นŒ?>

์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋‹ค์Œ ๊ธฐ์ค€์„ ์ฐธ๊ณ ํ•˜์ž!

1. ์†์„ฑ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์ œ๊ณตํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
 - ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ๋ณด์—ฌ์ค„ ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. 
//์†์„ฑ ์‚ฌ์šฉ
String str = "Hello";
int length = str.length(); // ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” ๋ฉ”์„œ๋“œ๋กœ ์ œ๊ณต(๊ณ„์‚ฐ ํ•„์š”)

int[] arr = {1, 2, 3};
int arrlength = arr.length; // ๋ฐฐ์—ด ๊ธธ์ด๋Š” ์†์„ฑ์œผ๋กœ ์ œ๊ณต(๊ฐ’๋งŒ ๋ฐ˜ํ™˜)

 

2. ๋ฉ”์„œ๋“œ๋Š” ๋™์ž‘(๊ณ„์‚ฐ , ์กฐ์ž‘ ๋“ฑ)์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

String str = "Hello";
String upper = str.toUpperCase(); // ๋ฌธ์ž์—ด์„ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ

int[] arr = {1, 2, 3};
Arrays.sort(arr); // ๋ฐฐ์—ด ์š”์†Œ๋ฅผ ์ •๋ ฌํ•˜๋Š” ๋ฉ”์„œ๋“œ

 

3. ์†์„ฑ์€ ๊ฐ’๋งŒ์„ ์ฝ๊ฑฐ๋‚˜ ์„ค์ •ํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ถ”๊ฐ€ ์ž‘์—…์ด ํ•„์š” ์—†๋‹ค๋ฉด ์†์„ฑ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

4. ๋ฉ”์„œ๋“œ๋Š” ์—ฐ์‚ฐ, ๋กœ์ง, ์ƒํƒœ ๋ณ€๊ฒฝ ๋“ฑ์˜ ์ž‘์—…์ด ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

<๊ตฌ์ฒด์ ์ธ ์˜ˆ : ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ ๋น„๊ต>

 

๋ฐฐ์—ด์˜ ๊ธธ์ด

int[] arr = {1, 2, 3, 4};
System.out.println(arr.length); // ์†์„ฑ : ๋‹จ์ˆœํ•œ ๊ฐ’ ๋ฐ˜ํ™˜

 

๋ฌธ์ž์—ด์˜ ๊ธธ์ด

String str = "Hello";
System.out.println(str.length()); // ๋ฉ”์„œ๋“œ : ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๊ณ„์‚ฐ ํ›„ ๋ฐ˜ํ™˜

 

๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” ๋ฉ”์„œ๋“œ๋กœ ์ œ๊ณต๋˜๋Š”๋ฐ, ์ด์œ ๋Š” ๋ฌธ์ž์—ด์€ ๋ถˆ๋ณ€(immutable) ๊ฐ์ฒด๋กœ ๋™์ž‘ํ•˜๋ฉฐ,

๋‚ด๋ถ€์ ์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์— ๋”ฐ๋ผ ๊ธธ์ด๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๋ถˆ๋ณ€ ๊ฐ์ฒด(immutable Object)๋ž€?
๋ถˆ๋ณ€ ๊ฐ์ฒด๋ž€, ํ•œ๋ฒˆ ์ƒ์„ฑ๋˜๋ฉด ์ƒํƒœ(๊ฐ’)๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ๊ฐ์ฒด๋ฅผ ๋งํ•œ๋‹ค.
์ฆ‰, ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ ํ›„ ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.
์ž๋ฐ”์—์„œ ๋Œ€ํ‘œ์ ์ธ ๋ถˆ๋ณ€ ๊ฐ์ฒด๋Š” String ํด๋ž˜์Šค์ด๋‹ค.

๋ถˆ๋ณ€ ๊ฐ์ฒด์˜ ํŠน์ง• :
1. ์ƒํƒœ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€ :
๊ฐ์ฒด๊ฐ€ ํ•œ ๋ฒˆ ์ƒ์„ฑ๋˜๋ฉด ๋‚ด๋ถ€ ๊ฐ’์ด๋‚˜ ์ƒํƒœ๋ฅผ ๋ฐ”๊ฟ€์ˆ˜ ์—†๋‹ค.
2. ์Šค๋ ˆ๋“œ ์•ˆ์ „(Thead-safe) :
์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ ๋™์‹œ์— ๋ถˆ๋ณ€ ๊ฐ์ฒด๋ฅผ ์ฝ์–ด๋„ ์•ˆ์ „ํ•˜๋‹ค.
๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋™๊ธฐํ™” ์ž‘์—… ์—†์ด ๊ณต์œ ๊ฐ€๋Šฅํ•˜๋‹ค. 
3. ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ :
๊ฐ’์ด ๋ณ€ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋™์ผํ•œ ๊ฐ’์„ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋Š” ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ๋„์›€์„ ์ค€๋‹ค. 

 


2. ๋ฐฐ์—ด ์ดˆ๊ธฐํ™” ๋ฌธ์ œ

arr[i] = x;

์ด ์ฝ”๋“œ๋Š” ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ๋ฐ˜๋ณต๋ฌธ ์•ˆ์—์„œ x๋กœ ๊ณ„์† ๋ฎ์–ด์“ฐ๊ณ  ์žˆ๋‹ค.

์ด๋กœ ์ธํ•ด ๊ธฐ์กด ๋ฐฐ์—ด์˜ ๊ฐ’์ด ๋ชจ๋‘ ์‚ฌ๋ผ์ง€๊ณ , x์˜ ์ดˆ๊ธฐ๊ฐ’์ธ 0์œผ๋กœ ์ฑ„์›Œ์ง„๋‹ค.

์ด๋Š” ์›๋ž˜ ๋ฐฐ์—ด์˜ ํ‰๊ท ๊ฐ’์„ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์—์„œ ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜์ด๋‹ค. 

 


3. ํ‰๊ท  ๊ณ„์‚ฐ์‹์˜ ์˜ค๋ฅ˜

return sum / (arr.length()+1);

๋ฐฐ์—ด ๊ธธ์ด์— 1์„ ๋”ํ•˜๋Š” ๊ฒƒ์€ ์ž˜๋ชป๋œ ๊ณ„์‚ฐ์ด๋‹ค.

๋ฌธ์ž์—์„œ ์š”๊ตฌํ•œ ๊ฒƒ์€ ๋ฐฐ์—ด์˜ ์ดํ•ฉ์„ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋กœ ๋‚˜๋ˆˆ ํ‰๊ท ์ด๋‹ค.

๋”ฐ๋ผ์„œ ๋‹จ์ˆœํžˆ arr.length๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. 

 


4. ์ •์ˆ˜ ๋‚˜๋ˆ—์…ˆ์œผ๋กœ ์ธํ•œ ์†Œ์ˆ˜์  ์†์‹ค

int / int ์—ฐ์‚ฐ์€ ๊ฒฐ๊ณผ๊ฐ€ ์ •์ˆ˜๋กœ ๋ฐ˜ํ™˜๋œ๋‹ค.

ํ‰๊ท ์„ ์ •ํ™•ํžˆ ๊ตฌํ•˜๋ ค๋ฉด ๋‚˜๋ˆ—์…ˆ์˜ ๊ฒฐ๊ณผ๋ฅผ ์‹ค์ˆ˜๋กœ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด sum์ด๋‚˜ arr.length๋ฅผ double๋กœ ํ˜• ๋ณ€ํ™˜ํ•ด์•ผ ํ•œ๋‹ค. 


Solution ๐Ÿ’ก

class Solutio {
   public double solution(int[] arr) {
     // 1. ํ•ฉ๊ณ„๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜ ์„ ์–ธ
     int sum = 0;
     
     // 2. for ๋ฌธ์„ ํ†ตํ•ด ๋ฐฐ์—ด ์š”์†Œ๋ฅผ ๋ชจ๋‘ ๋”ํ•จ.
     for (int i = 0; i < arr.length; i++) {
          sum += arr[i];
     }
     
     //3. ํ‰๊ท ๊ฐ’ ๊ณ„์‚ฐ (double๋กœ ํ˜• ๋ณ€ํ™˜)
     return (double) sum / arr.length;
   }
}

 

1. sum ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜์—ฌ 0์œผ๋กœ ์ดˆ๊ธฐํ™”.

2. for ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐฐ์—ด arr์˜ ๊ฐ ์š”์†Œ๋ฅผ sum์— ๋ฐ”๋กœ ๋”ํ•œ๋‹ค.

3. ์ตœ์ข… ํ•ฉ๊ณ„๋ฅผ ๋ฐฐ์—ด ๊ธธ์ด arr.length๋กœ ๋‚˜๋ˆ„์–ด ํ‰๊ท ๊ฐ’์„ ๊ณ„์‚ฐํ•œ๋‹ค. 

4. ๋‚˜๋ˆ—์…ˆ ๊ฒฐ๊ณผ๊ฐ€ double๋กœ ์ •ํ™•ํžˆ ๊ณ„์‚ฐ๋˜๋„๋ก (double) ํ˜• ๋ณ€ํ™˜์„ ์ ์šฉํ•œ๋‹ค. 


Reference ๐Ÿ“„

+ Recent posts