Skip to content

Commit b34b39f

Browse files
Add solution for Challenge 3 (#848)
Co-authored-by: go-interview-practice-bot[bot] <230190823+go-interview-practice-bot[bot]@users.noreply.github.com>
1 parent bac0c51 commit b34b39f

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package main
2+
3+
import "fmt"
4+
5+
type Employee struct {
6+
ID int
7+
Name string
8+
Age int
9+
Salary float64
10+
}
11+
12+
type Manager struct {
13+
Employees []Employee
14+
}
15+
16+
// AddEmployee adds a new employee to the manager's list.
17+
func (m *Manager) AddEmployee(e Employee) {
18+
m.Employees = append(m.Employees, e)
19+
}
20+
21+
// RemoveEmployee removes an employee by ID from the manager's list.
22+
func (m *Manager) RemoveEmployee(id int) {
23+
foundIndex := m.findEmployeeIndexByID(id)
24+
if foundIndex == -1 {
25+
return
26+
}
27+
28+
m.Employees = append(m.Employees[:foundIndex], m.Employees[foundIndex+1:]...)
29+
}
30+
31+
// GetAverageSalary calculates the average salary of all employees.
32+
func (m *Manager) GetAverageSalary() float64 {
33+
if len(m.Employees) == 0 {
34+
return 0
35+
}
36+
37+
totalSalary := 0.0
38+
39+
for _, v := range m.Employees {
40+
totalSalary += v.Salary
41+
}
42+
43+
return totalSalary / float64(len(m.Employees))
44+
}
45+
46+
// FindEmployeeByID finds and returns an employee by their ID.
47+
func (m *Manager) FindEmployeeByID(id int) *Employee {
48+
foundIndex := m.findEmployeeIndexByID(id)
49+
if foundIndex == -1 {
50+
return nil
51+
}
52+
53+
return &m.Employees[foundIndex]
54+
}
55+
56+
func (m *Manager) findEmployeeIndexByID(id int) int {
57+
for index, v := range m.Employees {
58+
if v.ID == id {
59+
return index
60+
}
61+
}
62+
63+
return -1
64+
}
65+
66+
func main() {
67+
manager := Manager{}
68+
manager.AddEmployee(Employee{ID: 1, Name: "Alice", Age: 30, Salary: 70000})
69+
manager.AddEmployee(Employee{ID: 2, Name: "Bob", Age: 25, Salary: 65000})
70+
manager.RemoveEmployee(1)
71+
averageSalary := manager.GetAverageSalary()
72+
employee := manager.FindEmployeeByID(2)
73+
74+
fmt.Printf("Average Salary: %f\n", averageSalary)
75+
if employee != nil {
76+
fmt.Printf("Employee found: %+v\n", *employee)
77+
}
78+
}

0 commit comments

Comments
 (0)